Overview of Agile and Iterative Development
Iterative and Agile development provide a different approach to developing applications that traditional "waterfall" methodologies. Agile and Iterative methdologies are a more fluid, customer-driven, and evolutionary-designed approach to developing applications. Whereas waterfall development likes to develop applications by performing big up-front design first, agile avoids that approach and develops the requirements along the way. There are many reasons for doing this, and this is not a foolish approach to designing software. It also does not support starting development of an application without any requirements at all; we will overview how requirements are developed later.
The more important question is: is there a reason for another methodology? The answer to that question is yes, because there are considerable reasons for doing so. There can be problems with big up-front design and developing a complete specification before developing the application. Several of the problems are:
Note that using the waterfall methodology doesn't mean the project won't work, and using an iterative approach doesn't always mean that there will be significant performance gains. "A study by Boehm and Papaccio showed that a typical software project experienced a 25% change in requirements" (AID, p. 72). In addition, another study showed that "45% of features were never used" (AID, p. 73). With traditional software development, these pose huge problems.
There are many projects that fit into the agile group of methodologies that are in existence today. The major methodologies are Scrum, eXtreme Programming, Unified Process, and EVO. These methodologies mix and max some of their features and differ in some ways, but some of the feature are:
This methodology as a whole has proven very successful. In my personal development experience, this methodology has been very helpful for me to design software. Because it can be very hard to design a system completely up-front, I am more comfortable and relaxed when using this methodology because as I design software, I can see how one part of the system interrelates with the other system, or it points out code that I need to refactor. And, when I use this design methdology, I reduce the amount of code I have to rewrite later.
To find out more information about iterative development, consult the following resources:
There are many more site available if you google the appropriate terms.
(AID) Craig Larman, Agile and Iterative Development, Addison Wesley