I’ve often heard people use iterative and incremental interchangeably in an agile context, and if I’m being honest I have often mixed up these terms myself. Mike Cohn does a great job explaining the difference using sculpting as an analogy, and till recently his example was the clearest I knew of when thinking of iterative versus incremental.
That changed last Friday as I was looking through the stories my team will build in the upcoming sprints as there are two pieces of work that we’ll be doing that are great examples of building iteratively, and incrementally.
A quick English definition of both words is helpful before we go any further.
- iterate:to say or do again and again
- increment:the action or process of increasing especially in quantity or value
In software terms – you iterate when you take a feature, and improve it successively, while an increment is delivering a feature, and then adding another one, and then another one, and so on.
In my example – we’re going to build a request submission process that requires approval and will trigger emails. Everyone has likely experience with this because they are one of the most common type of processes, and the end state is usually a process where you submit a request, it goes for approval, and upon approval it gets created, and alongside emails are triggered at every step.
This is what it would look like in a simple graphical manner:
The request creation process is iterative because we will first build something without any logic – everything gets approved, then we go back and add some logic, and allow approvals only, and finally, we add in the capability of rejection as well. This is an iterative process – we are making progress through successive refinement as Mike Cohn describes it.
The email process is incremental because each email notification is complete in its own right – the wording, branding, timing, recipient – everything is delivered fully at one go, and you don’t need to revisit a previously built email in the process of building the second one.
Agile development is both iterative, and incremental, and to some degree you can argue both sides on what is iterative versus incremental on almost everything. But I do believe this is a good example to illustrate the difference between the two, and how someone might decide whether their work is iterative or incremental.