Agile Software Development
Forrester notes the ability of Agile to deliver "improvements in time-to-benefits, overall quality and efficiency, team morale, the relationship between IT and business staff and responsiveness to change"
Agile differs from traditional "waterfall" software development methodologies in the following ways:
- » In a traditional waterfall project there is often an explicit analysis phase that takes the requirements provided by the end user (possibly at a high level) as an input into a functional / technical analysis. In an agile project requirements may not be specified in as much detail upfront. Instead the high level goals and main user stories may be specified with detail added during the iterations.
- » Requirements are more likely to change. Agile puts an emphasis on embracing the inevitability that things will change, and giving the users early and frequent chances to review the system as it is built.
- » There is often an emphasis on minimal design – only do just what is required to address the core business function under consideration for the iteration. However this should not be equated with quick and dirty design or implementation – there is still an emphasis on sound design, just a need to avoid adding complexity for the sake of possible future requirements.
- » In an agile project, the developers should have a much closer interaction with the end-user. There is an emphasis on getting initial functionality working and in the hands of the users as early as possible. As result a long up front design with no executable results is typically not appropriate.
- » Testing remains a fundamental component of agile software development projects. However, unlike in a waterfall project where there has typically been a separate testing phase, the project team's testing in an agile project is built into the development cycle itself and automated to ensure continuous testing without adding effort. This results in very high quality code.

