Agile grew out of a desire to improve traditional methods of software development. Customarily, software has been developed sequentially, with the waterfall serving as a rough metaphor for its progression. Separate groups conceive, design, build, test, put into operation, and maintain software, each group waiting for the preceding group to complete its work. The method is inefficient. In many cases, participants spend more time sitting in meetings and managing handoffs across organizational boundaries than writing and testing code. According to the often-cited The Chaos Report, less than 10% of large software projects come in on time and on budget.
The waterfall method comes from engineering, but writing many types of software is different from building a bridge. A river doesn’t change its course, but software users have frequently changing and unpredictable needs. Consequently, Agile relies on bringing together many different points of view and supporting back-and-forth dialogue between developers and business executives.
Many forms of Agile have been developed, but at its heart, Agile is a set of beliefs. It is iterative, empirical, cross-functional, focused, and continually improving.
- Iterative. Agile is based on doing things repeatedly until you get them right. Short iterations mean that teams can change direction and react quickly. Progress remains visible and predictable because development happens in short sprints. Delivery risk declines progressively.
- Empirical. Agile teams rely less on the plans, estimates, and assumptions common to waterfall methods and more on A/B testing and other real-time metrics generated by end users. One of the many virtues of sprints is that they produce empirical feedback quickly, allowing teams to self-correct. Agile teams also measure and track their activities closely.
- Cross-functional. Agile teams have members of such relevant functions as business, marketing, development, and, in some industries, risk management working closely together in order to facilitate early and frequent feedback from business executives and customers. All the members of the team have specific roles and responsibilities.
- Focused. Agile teams are fully accountable. They do not work on several projects simultaneously; nor do they leave a project once their specific duty is done. In for the duration, they develop a sense of accountability.
- Continually Improving. Agile software is a work in progress, with constant updates and experimentation aimed at satisfying customers.
Putting the Agile set of beliefs into practice can be difficult in large companies, given layers of processes and structures, such as HR, finance, and legal functions. Rather than viewing Agile as yet another new process, companies should integrate Agile values into their own software-development organization and culture, making reasonable modifications when necessary.