
Er zijn twee manieren van autonavigatie: non-agile en agile. Niet-agile navigatie is wanneer u een vel papier meeneemt met instructies zoals deze:
5 km rijden. Ga naar links. Bij het derde stoplicht rechts, dan voor het blauwe gebouw links. Stop wanneer u aankomt bij een tankstation.
Niet-agile navigatie werkt prima als er een pad naar de bestemming is dat bekend is en waar je geen fouten kunt maken. Als er iets verandert op het pad, als er wegwerkzaamheden zijn, als je een fout maakt op de route: dan is er geen tweede kans; het zal onmogelijk zijn om met de bestaande instructies de bestemming te bereiken. Bovendien: als er niemand in de buurt is die naar dezelfde bestemming is geweest (zelfs meerdere keren), is het onmogelijk om zo'n gedetailleerde beschrijving van de route te krijgen.
Agile navigatie maakt gebruik van verkeersborden. Om bij het San Francisco Museum of Modern Art te komen, volg je eerst de borden naar Californiƫ, vervolgens naar San Francisco en daar aangekomen volg je de borden naar SFMOMA. Het enige dat je moet weten, is waar je heen gaat, en ongeveer waar dat is (recursief, als je wilt). Deze manier van navigeren is zeer robuust: ook als een straat eenrichtingsverkeer wordt, of als het blauwe gebouw wordt afgebroken, kun je nog steeds op je bestemming komen. Wat nog beter is, is dat als uw exacte doel onderweg verandert, je de plannen nog steeds kunt wijzigen. Op weg naar San Francisco kun je nog steeds besluiten dat je in plaats van het museum de Golden Gate wilt bezoeken.

Nu probeer ik je natuurlijk niet te leren hoe je in een auto moet navigeren. Ik wil dit gebruiken als metafoor voor de ontwikkeling van software.
Hoe is softwareontwikkeling zoals navigatie? Je weet normaal gesproken niet precies wat je moet ontwikkelen. En slechts zelden kun je precies de sporen van iemand anders volgen. Softwareontwikkeling is niet zoals het bekende pad dat geschikt is voor niet-agile navigatie.
Toch wordt er nog steeds veel software ontwikkeld met behulp van niet-agile methodes. Specificaties worden volledig vastgelegd voordat de ontwikkeling wordt gestart. De exacte stappen die nodig zijn, zijn in detail beschreven. Contracten worden getekend. En dan ontstaan er wegblokkades, en het project overschrijdt het budget en loopt achter op schema. En als het project opgeleverd is, is de klant niet blij met de functionaliteit omdat ofwel zijn ideeƫn veranderd zijn, ofwel hij zich niet nauwkeurig genoeg heeft kunnen uitdrukken in de specificaties.
Agile softwareontwikkeling heeft alle voordelen van agile navigatie. Je kunt naar onbekende plaatsen gaan. Je kunt onderweg zelfs de details van de plannen wijzigen. En het is zeer robuust tegen onverwachte wegblokkades. Het is duidelijk de juiste keuze.
Agile softwareontwikkeling is niet eenvoudig. Maar het is minder vatbaar voor totale mislukking dan de traditionele methode. Laten we leren navigeren op de verkeersborden!