Wat is het iteratief verfijnen van het ontwerp?

Het verfijnen van het ontwerp verwijst naar het proces waarbij een initiële, globale architectuur of ontwerp verder wordt uitgewerkt naar meer gedetailleerde en specifieke componenten en interfaces. Dit proces zorgt ervoor dat abstracte concepten en structuren worden omgezet in concrete, implementeerbare modules. Het doel is om een duidelijk en uitvoerbaar plan te creëren dat de basis vormt voor de implementatiefase.

Casus

Sophie is een software developer bij een middelgroot techbedrijf dat werkt aan een nieuw platform voor online trainingen. In de eerste fase van het project heeft haar team een globaal ontwerp opgesteld: gebruikers moeten zich kunnen registreren, trainingen volgen, en hun voortgang bijhouden.

Tijdens een eerste sessie met stakeholders, waaronder een product owner en een onderwijskundige, wordt besproken wat precies wordt verstaan onder “voortgang bijhouden.” Het blijkt dat docenten graag willen zien hoe ver elke student is per lesonderdeel, terwijl studenten zelf vooral een simpel overzicht willen van hun totale voortgang.

Op basis van deze inzichten past Sophie samen met de software architect het ontwerp aan. De abstracte component “voortgang” wordt verfijnd naar twee specifieke modules: een “voortgangsoverzicht voor studenten” en een “analytics dashboard voor docenten.” Ze werken schematisch uit hoe de backend deze gegevens verzamelt en via API’s beschikbaar stelt aan de frontend.

In de weken erna volgen nog enkele iteraties. Tijdens een demo geeft een stakeholder aan dat het handig zou zijn als studenten ook feedback kunnen geven op onderdelen van de training. Het team besluit een feedbackcomponent toe te voegen aan het ontwerp, opnieuw beginnend vanuit een abstract idee dat verder wordt uitgewerkt naar concrete API-routes, validaties en UI-componenten.

Door het iteratief verfijnen van het ontwerp weet het team beter aan te sluiten bij de behoeften van de gebruikers en ontstaat er een technisch ontwerp dat zowel realiseerbaar als toekomstbestendig is.

Hoe zit het verfijnen van het ontwerp in elkaar?

Het verfijnen van het ontwerp benaderen we vanuit verschillende perspectieven. Namelijk: van hoog niveau naar detailniveau, van de verdeling van het systeem in modules, duidelijke koppelingen, consistentie en traceerbaarheid en iteraties. Eenvoudig gezegd: het gaat om inhoudelijke verfijnen die in iteraties tot stand komt.

Belangrijke aspecten van het verfijnen van het ontwerp

  1. Hiërarchische detaillering:

    • Begin met een hoog niveau overzicht van het systeem en werk dit stapsgewijs uit naar meer gedetailleerde componenten. Dit helpt bij het begrijpen van de relaties en interacties tussen verschillende onderdelen van het systeem.
  2. Modularisatie:

    • Verdeel het systeem in afzonderlijke modules of componenten met specifieke verantwoordelijkheden. Dit bevordert herbruikbaarheid, onderhoudbaarheid en testbaarheid van de software.
  3. Interface definitie:

    • Specificeer duidelijk de interfaces tussen verschillende modules. Dit omvat de gegevens die worden uitgewisseld en de wijze waarop communicatie plaatsvindt, wat essentieel is voor integratie en samenwerking tussen componenten.
  4. Consistentie en traceerbaarheid:

    • Zorg ervoor dat het gedetailleerde ontwerp consistent is met de hogere niveau architectuur en dat alle ontwerpbeslissingen kunnen worden herleid tot de oorspronkelijke systeemvereisten.
  5. Iteratief proces:

    • Het verfijnen van het ontwerp is vaak een iteratief proces waarbij feedback wordt verzameld en het ontwerp voortdurend wordt aangepast om te voldoen aan veranderende eisen of nieuwe inzichten.

Door het ontwerp zorgvuldig te verfijnen, wordt de overgang van abstracte architectuur naar concrete implementatie vergemakkelijkt, wat bijdraagt aan de ontwikkeling van robuuste en efficiënte softwaresystemen.

Hoe gebruik je het verfijnen van het ontwerp?

Het verfijnen van het ontwerp is een iteratief proces dat gericht is op het geleidelijk detailleren en verbeteren van het systeemontwerp. Het initiële ontwerpidee wordt verfijnt door middel van opeenvolgende iteraties.

Iteratieve verfijning in het ontwerpproces

  1. Initiële ontwerpfase:

    • Begin met het opstellen van een globaal ontwerp dat de belangrijkste componenten en hun onderlinge relaties beschrijft. Dit vormt de basis voor verdere detaillering.
  2. Eerste iteratie – detailontwerp:

    • Werk het globale ontwerp verder uit door specifieke componenten te definiëren, hun verantwoordelijkheden vast te stellen en interfaces tussen componenten te specificeren.
  3. Evaluatie en feedback:

    • Evalueer het gedetailleerde ontwerp met belanghebbenden om te controleren of het voldoet aan de gestelde eisen en verwachtingen. Verzamel feedback om eventuele tekortkomingen of verbeterpunten te identificeren.
  4. Herhaalde iteraties:

    • Pas het ontwerp aan op basis van de ontvangen feedback en voer aanvullende iteraties uit om het ontwerp verder te verfijnen. Dit kan het herzien van componentstructuren, het optimaliseren van interfaces of het verbeteren van prestaties omvatten.
  5. Validatie en verificatie:

    • Voer gedurende het iteratieve proces regelmatig validatie- en verificatieactiviteiten uit om te waarborgen dat het ontwerp consistent is en blijft voldoen aan de oorspronkelijke eisen.

Door het ontwerp iteratief te verfijnen, kunnen ontwerpers flexibel inspelen op veranderende eisen en nieuwe inzichten, wat resulteert in een robuuster en beter afgestemd systeemontwerp. Deze aanpak bevordert een diepgaand begrip van het systeem en draagt bij aan het identificeren en oplossen van potentiële problemen in een vroeg stadium van het ontwikkelproces.

SSDLC

Het iteratief verfijnen van het ontwerp binnen het ontwerpproces is nauw verbonden met de fasen van de Secure Software Development Life Cycle (SSDLC). In de SSDLC wordt het ontwerp vaak gefaseerd ontwikkeld en verfijnd. Aan het begin van de SSDLC wordt een globaal ontwerp gepresenteerd, wat het kader vormt voor de daaropvolgende fasen. Gedurende het proces worden de ontwerpen steeds gedetailleerder, waarbij nieuwe inzichten en eisen worden geïmplementeerd naarmate de ontwikkeling vordert. Het iteratief verfijnen van het ontwerp valt meestal onder de fasen van ‘ontwerp’ en ‘implementatie’, waarbij elke iteratie een meer gedetailleerd en werkbaar systeem oplevert. Dit proces zorgt ervoor dat de softwarearchitectuur niet alleen voldoet aan de initiële eisen, maar zich ook aanpast aan veranderingen die optreden tijdens de ontwikkeling en implementatie, bijvoorbeeld als gevolg van feedback van gebruikers of testers.

SCRUM

In SCRUM wordt in korte ontwikkelcycli gewerkt, het iteratief werken in ‘sprints’. Het verfijnen van het ontwerp sluit naadloos aan bij dit concept, omdat het ontwerp tijdens elke sprint steeds verder wordt uitgewerkt. Complexere functionaliteit wordt in meerdere sprints iteratief verfijnt om vervolgens in een sprint te worden gebouwd. De inschatting hiervan ligt bij het development team.
Bij eenvoudige functionaliteit kan een high-level ontwerp volstaan aan het begin van de sprint dat fungeert als een richtlijn tijdens de sprint. Gedurende de sprint werken teams dan aan de gedetailleerde uitwerking van het ontwerp, waarbij ze feedback ontvangen van belanghebbenden en de voortgang evalueren.
Dit proces van continue aanpassing en verfijning zorgt ervoor dat het ontwerp en de functionaliteiten van het systeem in lijn blijven met de veranderende wensen van de klant en de praktijkervaring. Door het gebruik van iteraties kan SCRUM zorgen voor een flexibel en responsief ontwerpproces, waarbij het ontwerp steeds dichter bij de uiteindelijke productbehoeften komt.