Software-ontwikkelen kan op vele manieren (watervalmethode, cowboy-coding, iteratief) maar de Agile-software-ontwikkelingsmethoden zijn de laatste jaren in populariteit gestegen. In dit blog beschrijf ik wat Agile-software-ontwikkeling nu eigenlijk is, wat de verhouding met SCRUM is en hoe we het gebruiken binnen het project “Voorbereiding nieuwe repository infrastructuur”. Het projectteam heeft ook een tweedaagse cursus gedaan om te leren wat Agile nu inhoudt en hoe het te gebruiken is.
Agile-software-ontwikkeling is een conceptueel raamwerk voor het uitvoeren van software-ontwikkelingsprojecten als alternatief voor traditionele starre praktijken.
Agile werkt met iteraties, waarbij elke iteraties eigenlijk een miniatuurproject op zichzelf is die in een korte periode uitgevoerd wordt. Dit miniatuurproject omvat planning, analyse, ontwerp, bouw, testen en documentatie. Dit miniatuurproject levert altijd iets bruikbaars op; dat kan in de vorm van een webpagina, een procedure, een prototype, een mockup, een functie of een deel van een werkend programma zijn.
Bij Agile-software-ontwikkeling ligt de nadruk op directe communicatie, bij voorkeur persoonlijk contact. Een Agile team moet op 1 locatie werken, liefst zelfs binnen een ruimte, waarbij het team in elk geval bestaat uit mensen die het product definiëren en mensen die de ontwikkeling doen. Tijdens de cursus hebben we geleerd hoe belangrijk communicatie is en hoeveel makkelijker directe communicatie gaat. Of eigenlijk hebben we zelf meegemaakt met oefeningen hoe lastig communiceren is als je niet direct contact hebt. Een van de oefeningen was om een tekening na te tekenen, waarbij de tekenaar de originele tekening niet zag. Communicatie met degene die de tekening wel voor zich had, ging door middel van briefjes. Hiermee leerden we hoe specifiek je moet zijn met communicatie, dat woorden altijd anders geïnterpreteerd worden en dat directe feedback cruciaal is.
Natuurlijk gaat het bij Agile-software-ontwikkeling niet alleen om de directe communicatie, maar heeft het meerdere aspecten. Om het hoe en waarom van deze aspecten beter te kunnen uitleggen, een korte geschiedenis van de Agile-software-ontwikkeling.
De geschiedenis van Agile-software-ontwikkeling begon midden jaren 90 als onderdeel van een reactie op “zwaargewicht”-methoden. Deze methoden zijn zwaar gereguleerd, detail-gestuurd en maken gebruik van waterval-ontwikkelmodellen. Deze modellen werden als bureaucratisch, traag en bekrompen ervaren en belemmeren de creativiteit en effectiviteit van ontwikkelaars. Hierdoor ontstaat er een aantal nieuwe methoden van software-ontwikkeling, zoals DSDM, SCRUM, Crystal Clear, Extreme Programming, ASD en FDD. Al deze nieuwe methoden hebben een aantal waarden gemeen. Deze waarden werden in 2001 in het Agile Manifesto vastgelegd en ondertekend door een groot aantal software ontwikkelaars.
Manifest voor Agile Software Ontwikkeling (vertaalde versie)
Wij laten zien dat er betere manieren zijn om software te ontwikkelen door in de praktijk aan te tonen dat dit werkt en door anderen ermee te helpen. Daarom verkiezen we:
- Mensen en hun onderlinge interactie boven processen en hulpmiddelen
- Werkende software boven allesomvattende documentatie
- Samenwerking met de klant boven contractonderhandelingen
- Inspelen op verandering boven het volgen van een plan
Hoewel wij waardering hebben voor al hetgeen aan de rechterkant staat vermeld, hechten wij méér waarde aan wat aan de linkerzijde wordt genoemd.
Het Agile Manifesto is gebaseerd op de onderstaande 12 principes:
- Klanttevredenheid door frequente, snelle levering van bruikbare software
- Regelmatig aanbod van nieuwe werkende software
- Voortgang wordt afgemeten a.d.h.v. werkende software
- Wijziging van doelstellingen zijn welkom, zelfs laat in het proces
- Nauwe samenwerking op een dagelijkse basis tussen ontwikkelaars en hun belanghebbenden
- Direct persoonlijk contact als beste vorm van communicatie
- Projecten worden opgezet rondom gemotiveerde individuen, en die moeten dan vertrouwd worden
- Voortdurende aandacht aan technische hoogstandjes en goed ontwerp
- Eenvoud is essentieel
- Zelf-organiserende teams
- Voortdurende aanpassing aan veranderende omstandigheden
In 2005 werd er nog een addendum geschreven aan het Agile Manifesto.
Declaration of Interdependence
“We …
- increase return on investment by — making continuous flow of value our focus.
- deliver reliable results by — engaging customers in frequent interactions and shared ownership.
- expect uncertainty and manage for it through — iterations, anticipation and adaptation.
- unleash creativity and innovation by — recognizing that individuals are the ultimate source of value, and creating an environment where they can make a difference.
- boost performance through — group accountability for results and shared responsibility for team effectiveness.
- improve effectiveness and reliability through — situationally specific strategies, processes and practices.
Dus wat is Agile nu eigenlijk:
- Adaptief
gericht op snel aanpassen aan de veranderende werkelijkheid, dus wanneer het moeilijk is om de toekomst exact te omschrijven en te plannen (heeft veel gemeen met RAD methoden) - Timeboxed
Agile neemt de timebox letterlijk (kort, hooguit enkele weken) - Klant centraal
De klant is onderdeel van het team. Na elke iteratie wordt voorgang besproken en de prioriteiten heroverwogen - Product als doel
Voortgang wordt gemeten aan de hand van werkende producten - Communicatie
Communicatie is heel belangrijk en gebeurt op persoonlijk nivo. Rapporten zijn geen communicatiemiddel.
Maar binnen de UBL maken we toch gebruik van de PRINCE2 methodiek? Betekent dit dat Agile werken en werken met PRINCE2 niet samengaan? Dat deze twee methodes elkaar bijten?
Nee, ze bijten elkaar niet, maar ze hebben wel verschillende doelstellingen. PRINCE2 is een projectmanagement methode, Agile is een software-ontwikkelingsmethode. Binnen het project “Voorbereiding nieuwe repository infrastructuur” worden beide methodes gebruikt naast elkaar. SCRUM (een Agile methode, hierover later meer) als de software-ontwikkeling en PRINCE2 als project management methode. Veel kernwaarden komen overeen bij deze twee methoden, alleen worden ze anders uitgewerkt. Het is echter goed mogelijk (en dat doen we dan ook) om binnen een PRINCE2 project de software ontwikkeling op een Agile manier uit te voeren.
We gebruiken SCRUM als Agile-software-ontwikkelingsmethodiek binnen het project “Voorbereiding nieuwe repository infrastructuur”. SCRUM werkt met een multidisciplinair team dat in korte sprints producten oplevert. Deze producten zijn meestal een aantal gerelateerde functionaliteiten binnen de repository infrastructuur. De sprint duurt bij ons 2 weken, niet langer maar ook niet korter.
De requirements die nog geïmplementeerd moeten worden, zijn beschreven in het product backlog. Deze requirements zijn geschreven in de vorm van een user story, zodat deze begrepen kunnen worden door alle teamleden en niet te technisch zijn. Aan de start van een nieuwe sprint wordt uit de items in de product back log de sprint backlog gemaakt. Dit gebeurt in een overleg tussen het team en de product owner. Er wordt een aantal items gekozen die de hoogste prioriteit hebben en binnen 2 weken te implementeren zijn.
Na elke sprint is er een potentially shippable product increment, oftewel een product dat echt aan de klant getoond kan worden.
Elke werkdag wordt er ook een scrum-meeting van 15 minuten gehouden. Hierin beantwoordt elk teamlid de volgende vragen:
- Wat heb je gedaan?
- Wat ga je doen?
- Wat zijn je problemen?
Natuurlijk is er nog veel meer te vertellen over Agile-software-ontwikkeling en in het bijzonder de SCRUM methodiek. Maar voor deze blog laat ik het hier bij, maar vragen mag je natuurlijk altijd stellen (bij voorkeur via directe communicatie!).