Iterative or Incremental?
TDD is both, but it can be a useful thinking tool to identify when you are working in each style. It’s also useful to realize that iterative and incremental works on many timescales, and TDD is iterative and incremental on a minutes-to-hours timescale.
Session Outline
- 5 min connect: Partial deliveries
- 5 min concept: Iterative and Incremental
- 40 min do: Mars Rover or similar
- 5 min reflect: identify when we did iterative or incremental development
Connect: give me 5
Give me 5 advantages to delivering a new piece of software in regular updates once per week rather than the whole thing once in 6-12 months time.
You are looking for answers like:
- End-user feedback we’re on the right track
- Earlier payments for delivered functionality
- Opportunities to stop the development early if everything needed is already done
- Delivery team learns to do releases well and cheaply
- Opportunities to match our competitor’s software updates sooner
Concept: Iterative and Incremental
Look at these two images:
These images are by Jeff Patton and from this article - but don’t have people read it just now, ask them to read it after the session.
Show the article and the pictures, or just the pictures on a slide of your own. Ask these questions:
- Both pictures show an agile development process with two deliveries of a partially finished picture and one final delivery. Which picture describes iterative development? Which one describes incremental development?
- What do the pictures of the thinking person mean?
- Which kind of process did we use on the kata in the last session?
Hopefully they will identify which picture is which and notice that with incremental development you need a much better idea of what you want. When you’ve worked on a kata in the previous session, like Mars Rover, you have probably been working iteratively, adding a new method then gradually adding all the needed functionality to it. Once a method is done, you hopefully don’t need to revisit it. You could say that it is an increment - a piece of the software that is completed and ready to deliver but not very useful on its own.
Do: Mars Rover or similar
If you are half way through a kata from a previous session you could continue with it. Otherwise perhaps start a new one, for example ClosestToZero.
Reflect: iterative and incremental experiences
- When did we work incrementally and when did we work iteratively?
- What are the advantages and disadvantages of each approach?
Discuss in pairs or as a group and each person note down what they learnt.