Modelleren - noodzaak of tijdverspilling?

Het zou vanzelfsprekend moeten zijn, maar voor de zekerheid stel ik de vraag toch maar: Waarom zou je (functionele en technische) modellen maken voor een webapplicatie? De meeste webapplicaties worden tegenwoordig ontwikkeld door teams, die werken volgens een agile methode, zoals Scrum of Kanban. Deze methodes doen geen uitspraak over het al dan niet produceren van ontwerpdocumentatie, waardoor de indruk kan ontstaan dat zulke documentatie niet nodig is. Bovendien zegt het Agile Manifesto: "We value working software over comprehensive documentation". Dat hetzelfde manifest daarbij wel zegt, dat ook documentatie waardevol is, wordt soms vergeten. Goede ontwikkelaars kunnen applicaties van hoge kwaliteit bouwen zonder modellen, maar toch pleit ik ervoor, om professionele applicaties altijd tot op een zeker niveau te voorzien van minimaal een domeinmodel, een architectuurmodel (de samenhang van services en componenten) en de belangrijkste scenario's in de vorm van sequence diagrammen. Dit alles met behoud van iteratief werken en prototyping. Waarom?

Omdat het tijd en geld bespaart en de gebruikers een betere applicatie krijgen!

Hierbij geldt wel de voorwaarde, dat de ontwikkelaars er achter staan. De genoemde besparingen vloeien voort uit het feit dat een ontwerp inzicht geeft in de structuur van de software en daardoor de kans op een slechte structuur (spaghetticode, inconsistenties, code duplicatie) vermindert. Zowel het inzicht in de structuur als de hoge kwaliteit van de structuur verminderen vervolgens...

  1. de kans op fouten en dus de tijd die het kost om fouten op te lossen;
  2. de tijd die het kost om uit te zoeken hoe een bepaalde wijziging of uitbreiding het beste ingepast kan worden;
  3. de tijd die het kost om onvolkomenheden in de structuur later recht te trekken.

Ik zei al: applicaties moeten tot op een zeker niveau voorzien zijn van een ontwerp, d.w.z. niet te gedetailleerd. Het moet voldoende zijn om vervolgens, wanneer je meer details wilt weten, deze gemakkelijk te kunnen vinden in de broncode. Als de broncode nog geschreven moet worden, moet het ontwerp voldoende zijn voor de ontwikkelaar om de details verder naar eigen inzicht in te vullen. Overigens is het niet altijd zo, dat het ontwerp eerst af moet zijn voordat er geprogrammeerd mag worden. Je kunt ervoor kiezen om eerst een prototype te maken, dit te evalueren, een ontwerp te maken van de gewenste situatie en vervolgens het prototype te verbeteren conform het ontwerp.

Het werkt het beste om het ontwerp door iemand anders te laten maken dan degene die de code schrijft, waarbij ze wel nauw samenwerken en elkaars werk beïnvloeden. Dit geeft een veel betere kwaliteit dan wanneer ontwikkelaars zelfstandig bepaalde functionaliteit implementeren. Afhankelijk van de individuele vaardigheden en affiniteiten kun je ervoor kiezen om dezelfde personen afwisselend te laten ontwerpen en te laten programmeren.

Veel meer informatie over ontwerpen in een agile omgeving is te vinden op de website www.agilemodeling.com van Scott Ambler.
Lees ook Martin Fowler's artikel "Is Design Dead?".