Ik weet niet wat ik wil en ik wil het ook niet weten - over iteratief of incrementeel ontwikkelen
We horen regelmatig dingen als “We weten precies wat we willen: hoe lang duurt dat om te maken?” en “We moeten eerst alles duidelijk hebben voordat we kunnen beginnen met bouwen”. In beide gevallen hebben degenen die dit zeggen ofwel het idee dat ze weten wat ze willen, of het gevoel dat ze dit precies zouden moeten weten voordat er software ontwikkeld kan gaan worden (spoiler: dat is gelukkig niet zo!).
Als je volgens de principes van Scrum ontwikkelt, werk je iteratief. Dat betekent dat je vooraf niet precies weet hoe je gaat maken wat je wil maken. Dat is iets anders dan incrementeel werken. Beide termen worden vaak door elkaar gebruikt, want op het eerste gezicht lijken beide werkwijzen veel op elkaar. In dit blog leggen we uit wat het verschil is tussen incrementeel en iteratief werken en waarom dat belangrijk is.
Iteratief of incrementeel?
Bij software ontwikkelen op een incrementele manier, weet je van te voren al exact wat je gaat maken. Vervolgens bouw je telkens een stukje van het geheel tot in detail uit. Elke increment voegt een stuk software toe en doet niets met hetgeen al gemaakt was in vorige increments. Na veel increments heb je veel software. Dit wordt als volgt geïllustreerd:
Incrementeren van de Mona Lisa (Bron: Jeff Patton)
Bij een iteratieve werkwijze gaat het anders. Je hebt van te voren slechts een globaal idee van wat je wilt gaan maken, maar nog niet precies hoe. Dit bedenk je gaandeweg, naarmate je een beter idee hebt hoe het uiteindelijke plaatje eruit gaat zien. En dit weet je op basis van feedback die je krijgt. Het is niet erg als er dingen veranderd moeten worden in een latere stap, omdat je niet alles perfect uitwerkt. Je maakt wat goed genoeg is voor nu, om vervolgens feedback te ontvangen. Je ontwikkelt met de verwachting dat het gaat veranderen. Als het wel in één keer goed is, is dat een prettig ongelukje. Hieronder staat weer een afbeelding van de Mona Lisa die bovenstaande uitleg visualiseert.
De Mona Lisa op iteratieve wijze (Bron: Jeff Patton)
In de praktijk
Bij het Agile ontwikkelen van software, passen we eigenlijk beide werkwijzen tegelijkertijd toe. Sommige onderdelen worden nieuw gebouwd en dus toegevoegd (incrementeel), terwijl andere bestaande functionaliteiten verder verfijnd en verbeterd worden (iteratief). In het voorbeeld van de Mona Lisa ziet dat er als volgt uit:
De Mona Lisa iteratief én incrementeel (Bron: Steven Thomas)
Weten wat je wil?
Om terug te komen op de inleiding van dit verhaal. De uitspraken “We weten precies wat we willen” en “We moeten eerst alles duidelijk hebben voordat we kunnen beginnen met bouwen” zijn beiden geen verstandige uitgangspunten om een software traject mee te beginnen. Je weet namelijk nooit écht wat je wilt, ook al denk je van wel. Als je de opgeleverde software eenmaal ziet, wil je het toch vaak net iets anders. En ook feedback van je gebruikers kan ervoor zorgen dat de software toch weer aangepast moet worden. Aan de andere kant kun je ook nooit van te voren alles analyseren en specificeren. Dat kost enorm veel geld en tijd. Die tijd kun je beter steken in het beginnen met bouwen en zo snel mogelijk verifiëren bij je gebruikers of je op de goede weg zit.
Conclusie
Laat het idee achterwege dat je precies moet weten wat je wilt. Als je gebruik maakt van iteraties zul je het vanzelf krijgen. Ook al wist je van te voren niet wat dit was. Johnny Rotten van de Sex Pistols verwoordde dit zo mooi:
Don’t know what I want, but I know how to get it.
Referenties:
Meer weten?