Een van de dingen die ik me goed herinner van mijn schooltijd is de uitspraak: “Als je geen fouten maakt leer je niks”. In een klas waar het ene kind een tien haalde en het andere een drie, is dat een hele geruststelling voor het kind dat een drie haalde. Je hebt tenminste wat geleerd (?). Als kind nam ik, zoals kinderen dat altijd doen, alles aan wat volwassenen tegen me zeiden en dacht ik er verder niet over na. Enige dat me bij bleef was een vaag gevoel dat een tien halen heel mooi is, maar dat als je fouten maakt je tenminste wat leert; en dat is ook wat waard.
De hele simpele tegenwerping van de dooddoener: “van je fouten leer je” is natuurlijk: “als je geen fouten maakt, hoef je niks te leren”. Beter dan “alles goed”, of “een tien” is er nou eenmaal niet. Het kind dat een tien haalt, is perfect en hoeft niks meer te leren (voor die stof in ieder geval).
In het software-ontwikkelproces leven we volgens mij al heel lang met de illusie dat wij die tien ook kunnen halen. Natuurlijk: testers roepen al heel lang dat testen gaat om het afdekken van risico’s: je kunt nu eenmaal niet alles testen. En vanuit de agile gedachte is de boodschap ook om iets te proberen, te kijken of dat werkt en snel aanpassingen te kunnen doen als het toch anders moet. Maar om een bug in productie hangt naar mijn gevoel nog steeds iets te veel een gevoel van “wiens schuld is dat?” en “hoe had dit ooit kunnen gebeuren?”. Terwijl we ons realiseren dat het onvermijdelijk is, balen we er blijkbaar wel van dat het gebeurt. Tuurlijk, niemand wil dat er fouten in productie zitten. Iedereen wil een tien halen voor z’n toets. Maar laten we niet vergeten dat je ook slaagt met een zes. De extra investering in een softwareproject om “een tien te halen” is het waarschijnlijk niet waard, en mogelijk zelfs contraproductief. Het moet niet alleen goed werken; het moet ook zijn wat de gebruikers uiteindelijk willen. Het ergste dat je kan gebeuren is perfect gestudeerd hebben voor het verkeerde examen… De algemene acceptatie van de imperfectie van je product is hierbij doorslaggevend. Maak van je gebruikers ook testers door bijvoorbeeld een open bèta te doen. Als iedereen die iets te maken heeft met je product accepteert dat het product imperfect is, maak je van critici bondgenoten die je helpen de imperfectie te verhelpen. En dat zal in veel gevallen goedkoper, sneller en zelfs beter zijn dan het product pas bloot te stellen aan klanten als het “perfect” is. In plaats van een dichtgetimmerd proces waarin we tot in den treure proberen een tien te halen en leren van fouten onmogelijk wordt, denk ik dat het beter is om te werken aan een organisatie, ontwikkelomgeving en klantbestand waarbinnen fouten als een gegeven gezien worden. Het doel is niet een organisatie waarin geen fouten gemaakt worden, het doel is een organisatie die fouten snel herstelt. Want wanneer accepteren mensen onvolkomenheden? Juist door ze van snelle patches te voorzien, en ze te betrekken bij het herstelproces. Niets is perfect. Maak het eerst maar eens, in alle openheid, net goed genoeg. Met een zes naar productie dus. Zodat er nog wat te leren valt van je fouten.