Agile Development is an approach to software development that attempts to reduce the cost of change, and so deliver software that meets business needs in a more predictable, timely manner.
It encompasses a variety of approaches and methods, but all share common features and are grounded in principles of the AgileManifesto.
Agile development practitioners believe that planning too far ahead is doomed to failure, because, however good we are, we are not prescient and we will make mistakes. They further believe that many TraditionalDevelopment processes are based on such predictions and that this is a fundamental reason why so many software projects fail.
Agile processes accept that mistakes will happen, that people will change their minds, misunderstand things and generally behave like human beings.
Instead of mitigating risk by trying to anticipate problems, agile projects are designed to avoid the increase in the CostOfChange completely. By accepting that change will happen and relying on several techniques to reduce the impact of late changes, agile processes alter the CostOfChange curve.
There are several techniques used on agile projects to effect this reduction in the cost of change. Instead of taking a qualitative approach to development, agile projects try as much as possible to take a quantitative approach.
- Estimates for this week are based on what was accomplished last week.
- Progress is measured by how much software is actually working.
- The usefulness of the software produced is measured by users using it and reporting back if it meets, or fails to meet, their needs.
These are pragmatic, measurable things. Of course, there remain times when guesses must be made based on experience. Agile projects attempt to reduce the impact of getting those guesses wrong by not extrapolating too far ahead, typically only one or two weeks ahead.
Agile projects are characterized by the following: