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)
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
- Phases are Time-Boxed not Functionally-Boxed.
- Test early, Test often.
- Deliver early, Deliver often.
- Production Quality.
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.
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?
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
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