What is Agile?
The word “agile” is defined as being able to move quickly, to be nimble or light on one’s feet. Think of a gazelle speeding across the savanna or a monkey moving from tree to tree.
In the world of software development, Agile represents a group of related methodologies used to manage and create software products. These Agile methods are characterized by incrementalism and iteration; that is, they promote dividing tasks into small phases of work and rely on frequent reassessments and adaptations of plans.
Agile methods aren’t used only within the software industry. In fact, the roots of these methods are in manufacturing, specifically the just-in-time (JIT) and lean production strategies employed by auto makers in the mid-twentieth century. These methods can likewise be applied in other areas of business as well as in our personal lives.
Agile as a methodology is flexible enough that we can mix-and-match these related variants as needed, using only what is appropriate on a given project. We’re not tied to a rigid prescription of how to do things, so long as the focus remains on the inspect and adapt cycle of providing incremental deliveries of business value.
The term “agile” was popularly introduced in this context with the drafting of the Agile Manifesto in 2001 as a response to the traditional method of creating software projects. The waterfall model (as it’s known) operates sequentially, moving completely through each phase of software development (eg. requirements > architecture design > writing code > testing & validation > deployment) before cascading down to the next activity. While it looks good in theory and is essential for some types of projects (eg. stable, highly-regulated), waterfall isn’t as effective in the faster world of software creation.
By being sequential and slow to change, waterfall introduces wasted time (waiting) and significant risk of missed requirements (and other surprises). For example, the diagram below shows that the risk (red line) shoots upward significantly as the waterfall project nears completion. Meanwhile, risk is kept low throughout the Agile project.
Low risk is accomplished in Agile projects by reducing batch sizes (incrementalism) and testing earlier & often (iteration), as demonstrated in the following illustration.
We can see that the older methods of software project management are predictive (in that the try to predict future needs from the outset), while Agile methods are adaptive (able to react and adapt to change). In Agile, requirements are written just-in-time and the architecture emerges as the project matures. The benefits to Agile include:
- reduced time to market
- increased quality
- reduced waste
- better predictability
- better team morale
In other posts we examine some of the several variants of Agile, including: Scrum, Extreme Programming (XP), Feature-driven Development (FDD) and others. We’ll also look at the Scaled Agile Framework (SAFe), an attempt to introduce Agile to the large enterprise.