Related terms: Incremental Delivery, Evolutionary Development, Timeboxing
A project life-cycle strategy used to reduce risk of project failure by dividing projects into smaller, more manageable pieces of “potentially shippable” product delivered over the course of a series of brief iterations, or sprints. Iterative development processes afford teams the ability to “inspect and adapt” their processes between iterations, leading to continuous improvement. The concept of iterative development stands in contrast to the traditional, waterfall method of “big design up front” followed by development and testing in strict sequence.
The concept of iterative development is central to all agile frameworks and is regarded as an essential part of agile development. Extreme Programming recommends that teams make frequent, small releases, working in iterations of one to four weeks, with one week being the preferred interval. Scrum also recommends regular cycles, called sprints, of one to four weeks.
Background of the Term
The concept of iterative software development was described by Tom Gilb in his 1988 book, Principles of Software Engineering Management, where he referred to it as Evolutionary Development. It has gone on to permeate all agile frameworks.
Currently, iterative development is strongly associated with incremental development, but historically that was not always the case. See, for example, Barry Boehm‘s paper A Spiral Model of Software Development and Enhancement in which the model is iterative but not necessarily incremental.