Het uitbesteden van softwareontwikkeling is moeilijk. Dit probleem ondervinden veel organisaties dagelijks. De ontwikkeling loopt uit, de software bevat niet de gewenste functionaliteiten en laten we het nog maar niet over de kosten hebben.
Nu is het uitbesteden van softwareontwikkeling ook geen sinecure. Als opdrachtgever probeer je het zo goed mogelijk te doen; je inventariseert alle functionaliteiten en werkt deze uit in een pakket van eisen en wensen. Vervolgens wordt het pakket aangeboden aan verschillende softwareontwikkelingorganisaties. Met volle enthousiasme leveren ze een aanbod om de software te ontwikkelen. Ze geven ook aan wanneer het af is en wat de kosten zijn. Klinkt goed.
Niet dus. Een van belangrijkste facetten van softwareontwikkeling is het delen van de 'taal' die in de organisatie gesproken wordt. Tijdens het opstellen van het pakket eisen en wensen is iemand uit de organisatie bezig deze taal vast te leggen. Diegene probeert zo goed mogelijk te beschrijven wat er nodig is. Mijn stelling is echter dat de beste persoon dat helemaal niet kan. En dat is absoluut geen gemis aan competentie bij deze persoon.
Vergelijk softwareontwikkeling met het kopen van een nieuwbouw huis. Misschien heb je dat zelf wel eens gedaan of vrienden of kennis om je heen. In de eerste fase is iedereen enthousiast. De bouwtekeningen worden bekeken om te zien hoe de kamer ingericht wordt, waar de meubels komen, etc. Als je uiteindelijk in het huis woont, wil je op een zonnige middag tv kijken. Je zet het apparaat aan, maar toch zie je niets. De zon schijnt midden in de tv, waardoor het zicht op het beeld geblokkeerd wordt.
Je vraagt jezelf af: had je daar geen rekening mee kunnen met de inrichting van het huis? Het antwoord is simpel: nee. Dit is typisch een punt waar je net even geen rekening mee houdt. In deze situatie gaat ook niemand vragen het huis vijf graden te draaien, zodat de zon er niet in schijnt. Per slot van rekening ga je niet zomaar een huis even draaien.
Met het specificeren van het pakket aan eisen en wensen is het net zo. Je kunt niet met alle details rekening houden. Toch zijn er vele punten die in eerste instantie details lijken, maar die tijdens het werken met de software juist erg belangrijk blijken te zijn. Of wanneer het niet werkt, juist erg vervelend zijn.
Dus ook voor het extern laten ontwikkelen van software geldt dat een agile benadering een must is. Een manier van werken waarin ontwikkelaars en gebruikers elkaar goed leren kennen, ze elkaars taal gaan spreken en zelfs gezamenlijk deze taal verder uitbouwen. Leg die pakketen van eisen en wensen dus ook snel aan de kant. Creëer met elkaar in kleine iteraties de software die daadwerkelijk nodig is. Eis ook als opdrachtgever dat je continu inzicht krijgt in de resultaten van de softwareontwikkeling en laat je dan niet afschepen met modellen en dikke documenten, maar eis werkende software. Het interessante van deze manier van softwareontwikkeling is dat de software tijdens het proces zelf groeit. Dit betekent namelijk dat de software ook na de oplevering verder kan groeien. En juist dan doet het er toe. We geven niet voor niets het grootste deel van het ict-budget aan onderhoud uit.
Wanneer we softwareontwikkeling uitbesteden in een agile vorm is het pakket van eisen en wensen niet het belangrijkste. De relatie die je opbouwt met de ontwikkelende organisatie is veel belangrijker. Laat dan ook grote softwareontwikkelvragenstukken niet in een keer ontwikkelen, maar splits het op zodat je de relatie met de uitvoerder kunt testen.
Ik kan het woord uitdaging niet meer horen! Wat is dat toch voor een yuppig stopwoordje.