Iterative Development

The word "iterative" means that it involves repetition.

Iterative Development is a development approach that "cycles" through the development phases, from gathering requirements to delivering functionality in a working release.

Contrast this with the WaterfallModel, where you gather all the requirements up front, do all necessary design, down to a detailed level, then hand the specs to the coders, who write the code; then you do testing (possibly with a side trip to IntegrationHell) and deliver the whole thing in one big end-all release. Everything is big including the risk of failure.

Consider also IncrementalDelivery; (an XP page that may actually be talking about IterativeDevelopment) IncrementalDelivery also delivers functionality to users in cycles, but is historically less focused on reworking existing functionality. So a traditional "IncrementalDelivery" project will deliver one subsystem at a time to the end users, with "as little change as possible" to each subsystem, after it's delivered.

A key differentiation between the traditional WaterFall and the Iterative processes is how the project tasks are boxed in the plan. If they are functionally boxed you are probably WaterFalling?, if they time-boxed you are probably Iterating.

The mantras of IterativeDevelopment are:

Iterative Development processes grew out of ObjectOrientedDevelopment? where it quick appreciated that a Class could be considered a mini-project and developed in isolation, the task was naturally boxed by its responsibilities.

Some examples of Iterative Development Processes.

-- MartinSpamer


The TelescopeRule is also a good analogy for the reasoning behind IterativeDevelopment.


I looked up the word "iteration" in the index of ExtremeProgrammingExplainedEmbraceChange. It was there and there was also a pointer to Iteration - defined, pointing to page 180, which is a blank page!


The problem I have is with iteration 1. For example I am given a high level spec which says "Build a system which can control the equipment to carry men to the moon and land them on the surface. The system must also be able to bring them safely back to Earth". Which piece should/can I design, code and deliver in the first 1 to 2 months, giving my customer usable/valuable functionality?

-- BarryAllebone?

In XP terms, how about a series of spikes:

Learn from each spike and refactor your design -- TomAyerst

Decompose the system into functional parts and implement one of them. E.g. build software which controls the amount of oxygen in the air, or or or...


See also: IterativeVsIncremental


EditText of this page (last edited March 15, 2005) or FindPage with title or text search