What is agile?

By Barnaby Golden, 7 November, 2010

What is agile? A simple question with a complicated answer.

A good point of reference for agile is the agile manifesto. This consists of four basic premises and twelve more detailed principles.

Agile is an approach to software development that is aimed at minimising the cost of making changes. Think of agility as the capability to make rapid changes of direction, to be flexible and to adapt.

In practical terms, to be truly agile an organisation must be capable of releasing frequently (whether it does actually release frequently is a business decision). When you think about frequent releases it becomes clear that it is not a good idea to have lots of up-front requirements gathering and lots of up-front design. It also does not make sense to push integration and testing to the end of the development process, when any issues will likely impact on an imminent release.

The desire to be capable of frequent releases drives agile practice. Good communication and transparency is emphasised and for good communication a small, cross-functional team makes sense. The business needs to be closer to the actual development work, even to the extent of collocating business users to the development area, or moving development to where the business is.

Planning is a process of refinement, with the detail added as a requirements gets closer and closer to being worked on. In agile it is recognised that there is inherent uncertainty in software development, particularly when requirement change is encouraged. The focus is on detailed planning of what is going to be done in the next few days or weeks, rather than months or years. Medium and long term planning is still possible with the agile approach, but it comes with a recognition that uncertainty and change can blow these longer term plans away.

Agile engineering practice is focused on the need for agility and frequent releases. Hence automation is used where practical (particularly in regression testing and releasing). Quality is valued highly because bugs represent uncertainty and uncertainty will often frustrate the capability for rapid change.

Think of agile as a goal (responding to change) and an approach that is necessary to achieve that goal.