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:
- 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.
--
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:
- 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
--
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