Incremental development slices work into small bite-sized pieces. These are called increments. Each increment builds on top of what has gone before. Fully functional modules grow bit-by-bit over time. Each evolution adds to preceding functionality.
Iterative development is the process of repeating and refining a cycle/way of working. This is called an iteration.
Consider a team building an e-commerce web site. The team might develop a small increment of working, yet unrefined, functionality and then iteratively refine that over time. They will then add more features until the functionality was considered satisfactory.
An Incremental example:
- In the first step of a website check-out engine, payment with debit cards (a first increment) is implemented.
- The second step might produce an increment that supports payment by credit card.
- Finally, the third step might add an increment allowing payment via PayPal.
An iterative example:
- The first step would be a thin slice through the entire system laying out the basic structure of the application.
- Subsequent steps would add the next thin layer to the system.
- The process repeats until there is a fully functional end to end customer journey.
Outside of software development, the most common example used is that of an artist painting a picture.
If the picture was painted iteratively, but not incrementally, the artist might start with a sketch of the finished image (a prototype). Then the artist would iteratively add paint to the drawing over time. The artist would revisit the picture, changing it until he was happy with the finished image.
Now, consider painting the same picture but in a purely incremental, but not iterative way. The artist would first perfect one part of the picture before starting on any other part. Once he was happy with one section, he would only then start on the next, and so on. The artist perfects each element of the painting before the next one begins.
Example: house building
If a house building were incremental, you would construct one room entirely – including furniture, paint, and carpet. Then create the next room in the same fashion until you had a finished house.
Due to their complementary characteristics, incremental and iterative development is most effective when used together, for example as part of agile frameworks, most notably Scrum.
The Scrum guide references iterative and incremental:
“Scrum employs an iterative, incremental approach to optimize predictability and control risk“, “Scrum Teams deliver products iteratively and incrementally, maximizing opportunities for feedback. Incremental deliveries of “Done” product ensure a potentially useful version of a working product is always available”.
Scrum is iterative in that work is planned for one iteration and then improved upon in subsequent iterations, and incremental as completed work is delivered consistently throughout the project.
- Download our useful factsheets on all things agile