The Agile method of software development is a group of several programming disciplines which are all very similar and therefore referred to under the common name "Agile". Some of the more common types include:
- Extreme Programming
- Agile Modeling
- Feature Driven Development
They all have slightly different methods of tracking and completing development, but all are very similar in the sense that they strive to shorten software development cycles. This rapid iteration of software prevents months of work from being wasted due to product failure at the completion of a project, or when major changes are made late in development. The developers are able to react quickly and waste as little work as possible. It also allows them to make changes that are requested more quickly.
Agile is recognized for being a method of development in which developers post colored sticky notes all over walls and giant whiteboards. This provides transparency and allows for tracking of their progress on each progress.
A criticism of Agile is that it is too developer centric and not customer centric. Proponents of Agile disagree, noting that (similar to Lean development) customers do not always know what they want, and what they actually want is not necessarily what they will ask for. Agile seeks to understand this through user testing, metrics, and small iterative development, which allows for immediate implementation of customer feedback. Agile software development uses a User Experience Designer to design the overall experience of the user in tandem with both the developers and the graphic designers. As a product is designed, iterations are tested on a customer. This customer can be an actual customer, potential new customers, or members of other business units within the company.
Common techniqes in different types of Agile include test driven development, automated test driven development, and paired programming. Test driven development and automated test driven development (TDD and ATDD) are ways to program that involve writing acceptance tests and automatically testing each of them for each piece of code to be "accepted". This makes the job of a quality assurance person easier, as the code either passes or fails the acceptance test. Failures can be immediately investigated and fixed. Paired programming involves two developers programming at the same computer. This seemingly hurts efficiency, but helps the developers catch each others mistakes and program faster overall. They also do this to expand the pool of knowledge used for each project and for cross-training purposes.
The Agile method can be used by development teams only, but is more effective when the entire organization buys into the methodology. When all of the business units have bought into Agile, the goals of the organization and product drive the development of both new software and updates to old software.
Some organizations takes the general philosophies of Agile and blend different aspects of each type to make their own process that best suits their company.