Agile is a group of software development methodologies that are based on some iterative process. Agile software development is typically done by teams of programmers that are self-led. It has become the de facto standard for software development. Most large software shops develop software using some Agile method.
The term Agile was coined in 2001 by a group of programmers who came together specifically with the purpose of discussing lightweight programming methods. Together, this group of programmers formed the “Agile Manifesto” which is available in many places on the internet. The precepts of this Manifesto are that individuals, interactions, working software, customer collaboration and quick response to change are the keys to good software development.
Some common Agile methods are Extreme Programming, Feature Driven Development, Kanban and Scrum. There are also quite a few other methods that fall within the Agile umbrella. Each method is typically tailored to both the group doing the development and the customer who is the reciprocate of the development.
What are the advantages of Agile?
Better quality software is one of the major advantages of Agile. The iterative cycle of software development allows the team creating the software to refine it with each iteration. Also having the customer involved directly in the creation of the software allows for issues to be discovered early. Since issues are discovered early, they can be fixed with a minimum of effort. In typical software development the customer typically doesn’t see the product until it’s “complete”.
Another huge advantage of Agile development is the ability to release the software early. In typical software development the product can’t be released until it’s complete. In Agile, the software can be released as soon as it has enough functionality to make it usable. Typically the highest value functionality is added early in the process and the least desirable features are put at the end of the development. This often allows for functionality that may not really be “required” to be left out of the software saving cost.
The last advantage I’ll note is happier development teams and happier end customers. Through the collaborative process both sides win. The development team wins because they are able to create software the customer truly wants and the customer wins because they get the software they actually asked for.
What are the disadvantages?
It’s very difficult to accurately estimate time to completion under Agile. There are methods that have been developed that help but in general it takes a very experienced team of developers or quite a few iterations to determine speed and thus completion dates.
Some teams are inherently poor at documentation and the Agile methods accentuate this short coming. In the haste to produce a good quality, quick product, design and documentation can be overlooked.
Agile requires a bigger time commitment from the product owner. If the customer doesn’t stay actively engaged throughout the process the end product will not be good.
Requirements emerge during the development process sometimes extending the project. These hidden unknown requirements in combination with the difficulty of estimating up front often cause concern with senior management.
Agile requirements are sometimes sketchy. This can cause issues with new developers who are not used to the Agile process.
Agile software development can create some excellent software under an experienced development team. The team and the customer are generally much happier with the entire process. There are absolutely disadvantages to Agile, but most teams who have practiced it feel the benefits far outweigh the disadvantages.