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 Waterfall Model, 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 Integration Hell) and deliver the whole thing in one big end-all release. Everything is big including the risk of failure.

Consider also Incremental Delivery;

(an XP page that may actually be talking about Iterative Development) Incremental Delivery also delivers functionality to users in cycles, but is historically less focused on reworking existing functionality. So a traditional "Incremental Delivery" 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 Water Fall and the Iterative processes is how the project tasks are boxed in the plan. If they are functionally boxed you are probably Water Falling, if they time-boxed you are probably Iterating.

The mantras of Iterative Development are:

Phases are Time-Boxed not Functionally-Boxed.

Test early, Test often.

Deliver early, Deliver often.

Production Quality.

Iterative Development processes grew out of Object Oriented Development 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.

Agile (XP).

Iconix

OPEN.


The Telescope Rule is also a good analogy for the reasoning behind Iterative Development.


I looked up the word "iteration" in the index of Extreme Programming Explained Embrace Change. 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?

In XP terms, how about a series of spikes:

build a rocket engine that has enough thrust

build a rocket that can lob a man into space

build one that can lob him into orbit

dock two space vehicles in orbit

land an unmanned one-way vehicle on the moon to check the environment

fly round the moon

test out the lander near the moon

Learn from each spike and refactor your design

land on the moon.

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 original on c2.com