Agile is a general term and conceptual framework used to describe a number of “light-weight” methodologies, such as Extreme Programming (XP), SCRUM, and Rapid Application Development (RAD), which exhibit a series of common characteristics. Some of these characteristics include:
- Iterative analysis and development
- Time-boxed iterations of a predefined length
- Delivery of the most critical features and functions first
- Delivery of a complete build with an initial set of limited features within a few months (often 1-2 months)
- Small cross-functional teams usually of 6-9 team members.
- Daily team communication meetings
- Reduced levels of documentation
Most Agile methods begin with a prioritized feature list where features are group together into deliverable chunks and assigned to a particular iteration in which they will be developed and delivered. Using small teams and daily communication among all team members the Agile team can achieve a high level of efficiency.
Agile methods are intended to overcome or circumvent many of the recurring challenges that are encountered during software development projects. The iterative nature of these methods, along with the desire to deliver smaller sets of defined features per iteration, help mitigate risk due to evolving requirements, unclear project stakeholder direction, and unforeseen project complexities that typically arise during the latter stages of analysis and development. Some of the most salient advantages of Agile methods include:
- Availability of working software much sooner which allows for more immediate feedback from application users.
- More immediate, and therefore larger, Return on Investment from software features that are developed in short iterations and release to production immediately.
- Less project overhead due to smaller team sizes.
- Avoidance of large schedule overruns.
- Avoidance of large budget overruns.