Elk softwareproject altijd binnen planning en budget

Voor opdrachtgevers van softwareontwikkeling is al vele jaren de grootste zorg of het doel wel op tijd (en dus binnen budget) bereikt zal worden. In een poging deze onzekerheid te bestrijden wordt telkens weer om gedetailleerde plannen gevraagd. Hoe begrijpelijk dit ook klinkt in de context van budgetbeheersing, is het helaas geen reële oplossing.

Wat vooraf ging

gantt

Eind vorige eeuw werd het ontwikkelen van software steevast beschouwd als een project. In de jaren 80 en 90 is op basis van die aanname veel nagedacht over de redenen van het doorlopend falen van deze projecten. De heersende gedachte was toen dat we gewoon niet goed genoeg ons best deden om die projecten onder controle te houden. Daarom werden er in die tijd steeds “betere” manieren gevonden om specificaties op te stellen en volgens het plan te werken.

Met het succes van Extreme Programming aan het begin van deze eeuw en de daarop volgende Agile hype, groeide het inzicht dat ontwikkeling van software meer lijkt op een ambacht (of zelfs kunst) in plaats van een project. Waar in de bouw een grote productiefase start nadat de specificaties zijn afgerond, bestaat softwareontwikkeling vrijwel geheel uit het maken van specificaties in de vorm van programma code, en is het omzetten naar uitvoerbare code een volledig geautomatiseerde taak die nauwelijks tijd kost.

Het gevolg hiervan is dat de projectmatige planbaarheid van softwareontwikkeling een illusie is.

Onmacht van specificaties

Omdat ontwikkelingen elkaar tegenwoordig steeds sneller opvolgen, veranderen voortdurend de eisen die door de omgeving aan software worden gesteld. Wat vorige maand nog een goed idee leek, kan deze maand alweer achterhaald zijn. Daarnaast is het menselijke voorstellingsvermogen niet berekend op het beoordelen van beschreven functionaliteit. Omdat een mens nu eenmaal niet meer dan een handvol concepten in zijn werkgeheugen kan opslaan, is het vreselijk moeilijk om alle mogelijke interacties tussen die concepten na te gaan. We zijn veel beter in redeneren tijdens interactie met concrete zaken, waarbij we ons geheugen dus minder hoeven te gebruiken. Niet zelden ontstaan belangrijke inzichten pas als er door echte gebruikers met de software “gespeeld” kan worden, en levert een “artists impression” van de gebruikersinterface altijd meer inzicht op dan de gedetailleerde beschrijving ervan.

Oneindig veel mogelijkheden

Elk software programma bestaat uit oneindig veel details, waardoor er ook oneindig veel manieren zijn om hetzelfde doel te realiseren. De kosten van elk van die oplossingen is afhankelijk van dingen die vooraf moeilijk in te schatten zijn, zoals het kennis/ervaring/inspiratie van de ontwikkelaar die de software maakt, terloops gemaakte ontwerpbeslissingen, of praktische beperkingen van gebruikte externe componenten. Het vooraf strikt vastleggen van oplossingen zal hierdoor altijd leiden tot minder optimale keuzes.

De betere manier

Bovenstaande effecten impliceren dat de onzekerheid toeneemt hoe verder je in de toekomst probeert te kijken, en dat het te vroeg nemen van beslissingen erg kostbaar kan zijn. Door juist gebruik te maken van deze inzichten ontstaat een veel krachtigere manier om softwareontwikkeling maximaal te sturen:

Backlog

Stel een lijst op van functionaliteiten vanuit het gebruikersperspectief, en sorteer deze lijst doorlopend op prioriteit. Hierdoor ontstaat een dynamisch plan dat zich eenvoudig aan de context aan laat passen. Splits vervolgens alleen de functionaliteit met de allerhoogste prioriteit op in kleinere stukjes, zodat details voor de korte termijn duidelijk zijn maar de lange termijn slechts in grote lijnen wordt bepaald. Concrete ontwikkeling vindt altijd alleen plaats aan gedetailleerde functionaliteit van de allerhoogste prioriteit.

Door alle elementen van de lijst te voorzien van een relatieve omvangschatting, kan op basis van de werkelijke productiviteit een prognose gemaakt worden op welk moment functionaliteit aan de beurt zal komen. Door de lijst op basis van deze informatie bij te werken, kan het rendement van de investering actief door de opdrachtgever gestuurd worden, en kan actief naar extern opgelegde deadlines worden gewerkt.

Investeren in softwareontwikkeling betekent voor opdrachtgevers niet langer vragen naar de planning, maar doorlopend en meedogenloos prioriteiten blijven stellen.