Agile development is an approach to software development that advocates adaptive planning, early delivery, and continual improvement. It is typified by collaboration and a rapid, flexible approach to change. By contrast, the older waterfall development model is a linear, rigid approach that progresses from conception to analysis, design, build, test, deploy and maintain. It is less flexible and collaborative than agile, and thus less adaptive to change.
The agile method was created in 2001 by a group of software developers who met in Snowbird, Utah to discuss the need for lightweight development methods. Together they published the Manifesto for Agile Software Development, which laid out some foundational values and twelve principles:
- Customer satisfaction by early and continuous delivery of valuable software.
- Welcome changing requirements, even in late development.
- Deliver working software frequently (weeks rather than months)
- Close, daily cooperation between business people and developers
- Projects are built around motivated individuals, who should be trusted
- Face-to-face conversation is the best form of communication (co-location)
- Working software is the primary measure of progress
- Sustainable development, able to maintain a constant pace
- Continuous attention to technical excellence and good design
- Simplicity—the art of maximizing the amount of work not done—is essential
- Best architectures, requirements, and designs emerge from self-organizing teams
- Regularly, the team reflects on how to become more effective, and adjusts accordingly
Agile methods embrace these principles in various ways. Most will break the work into small chunks with minimal up-front planning and design requirements. The work is done in short sprints that are 1-4 weeks long, and usually involves cross-functional teams that work on all functions at the same time: planning, analysis, design, coding, unit testing, and acceptance testing. At the end of the sprint, the work is shown to the stakeholders, which minimizes risk, and also permits the product to adapt to emerging changes. A daily stand-up meeting is also typically part of the agile method. In this meeting, team members report to each other about the previous day’s work and their plans for the coming day. This emphasis on communication leads to better collaboration and quality.