Iterative development is a way of breaking down the software development of a large application into smaller chunks. In iterative development, feature code is designed, developed and tested in repeated cycles. With each iteration, additional features can be designed, developed and tested until there is a fully functional software application ready to be deployed to customers.
Typically iterative development is used in conjunction with incremental development in which a longer software development cycle is split into smaller segments that build upon each other.
Iterative and incremental development are key practices in Agile development methodologies. In Agile methodologies, the shorter development cycle, referred to as an iteration or sprint, is time-boxed (limited to a certain increment of time, such as two weeks). At the end of the iteration, working code is expected that can be demonstrated for a customer.
Iterative development contrasts with a traditional waterfall method in which each phase of the software development life cycle is “gated.” Coding doesn’t begin until design of the entire software application is complete and has gone through a phase gate review. Likewise, testing doesn’t begin until coding is complete and has passed necessary phase gate reviews.
The purpose of working iteratively is to allow more flexibility for changes. When requirements and design of a major application are done in the traditional method (sometimes referred to as BDUF or Big Design Up Front), there can be unforeseen problems that don’t surface until development begins. By working iteratively, the project team goes through a cycle where they evaluate with each iteration, and determine what changes are needed to produce a satisfactory end product.