An incremental development process works on the basis that work is sliced into pieces (increments). Each increment builds on top of what has gone before. So, fully functioning modules of functionality are built up over time, with each adding to what has already been produced. Iterative development is the process of repeating and refining a cycle/way of working (an iteration).
Product development example
Take the context of product development by a software team as an example. 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. For example, in a team’s first iteration, a website payment engine might be coded to only allow payment with debit cards (a first increment). The second iteration might produce an increment that supports payment by credit card. Finally, the third iteration might add an increment allowing payment via PayPal.
To illustrate this 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 picture (a prototype). Then the artist would iteratively add paint to the sketch over time. The artist would revisit the picture, changing it, until he was happy with the finished picture. 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 part, he would only then start on the next, and so on. Each part of the painting would be made perfect before the next one was even started. In the same way, if a house was built incrementally, you would build one room completely – including furniture, paint and carpet. Then build the next room in the same fashion until you had a finished house.
Due to their complimentary characteristics, incremental and iterative development are most powerful when used together, for example as part of agile frameworks, most notably Scrum. As referenced in the Scrum guide: “Scrum employs an iterative, incremental approach to optimise 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 working product is always available”. So, 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.