In het kort; ben stellig van mening dat er niet één methodologie kan zijn voor een 'groep projecten'. Hoewel XP/Scrum/RUP... en net zo goed het waterval-model goede best practices bevatten zal het zelden voorkomen dat één methodologie perfect geschikt is voor een project. Het met zijn allen periodiek reflecteren op elkaars werkaanpak is een basis die ik veel nuttiger acht. Hoe groter de ervaren problemen hoe meer nadruk je op de procesverbetering moet leggen; juist als de tijd en deadlines dit -weer- niet toelaten.
Om de hoofdvraag direct te beantwoorden: ja, waterval is de geprefereerde methode als je zelf de meeste domeinkennis hebt, dit domein stabiel is, en je alles zo kan specificeren dat je kan beginnen met programmeren door simpelweg bij punt 1 te beginnen en er lineair doorheen kan lopen. Lees: bijna nooit. Om dit punt te bereiken ben je ontzettend lang bezig (zo zou ik me kunnen voorstellen dat NASA alles vantevoren zo uitkauwd dat dit het geval is). Dit punt is zo duur dat elke project manager het project lang voor die tijd hoort te beeindigen.
Waterval 'paradox' (of beter planning paradox) is dat als je eenmeel dit punt als bedrijf bereikt je repetitief bezig bent en de noodzaak om alles te documenteren en vast te leggen bij de medewerkers verdwijnt; dit zou je dan moeten gaan afdwingen. Over het algemeen kan je d.m.v. code en architectuur een fatsoenlijke manier bedenken repeterend werk te versnellen waardoor je alleen de variabele code schrijft. Ik noem het niet voor niets variabele code; je verwacht dat dit nooit helemaal hetzelfde zal zijn en aan veranderingen onderhevig is, zoals bekend is het waterval model hiervoor niet ideaal. Andere termen hiervoor zijn generieke en specifieke code of abstractie en details. Zo heb ik ook ooit iemand horen zeggen een voorkeur te hebben voor waterval bij het definieëren van de kern van het programma en deze zo in te richten dat je verder agile aan de slag kan. Zelf niet zo'n voorstander van; heb nog nooit een architectuur gezien die volledig stabiel bleef, en als je dit wel nastreeft gaan mensen toch wel lelijke omwegen bedenken om het werkend te krijgen (of in zijn geheel nabouwen, iedereen wel bekend mee denk ik).
Wat me bij mijn eerdere werkgevers opviel dat alles over Xp/Scrum/DSDM/RUP/Waterval nooit fatsoenlijk word toegepast (we komen niet verder dan wikipedia). Zo heet een dagelijkse vergadering al snel scrum; en niemand die dat corrigeerd omdat we alles toch maar klakkeloos overnemen.
Niet dat dit slecht is, prima als het werkt, maar we schieten onderwater al snel door naar elementen van beide extremen (ad-hoc naar planned). Ad-hoc ging eerst prima maar we lopen tegen wat problemen aan; ow, laten we dat op deze en die manier voorkomen en schieten ons doel voorbij; we bouwen elementen in van wat we het waterval model of ad-hoc noemen. Twee voorbeelden:
- Documentatie wordt niet up-to-date gehouden (waar niet...?); we schaffen alle technische documentatie af omdat code zelf-documenterend hoort te zijn (degene die dit doorvoerde had een PhD)
- FO is ontoereikend; we vereisen een TO en verifiëren de uitwerking hiervan in code reviews
Bij het eerste voorbeeld lieten ze me (ik als buitenstaander) een stuk code zien die me een halfuur koste om te doorgronden waarvan ze zelf beweerden dat dit zelf-documenterend was. Abstracte/generieke code is NOOIT zelf-documenterend want hoe weet je precies hoe ik het wil gebruiken, wat mijn doelen zijn? Gelukkig zat er een unit-test bij en was dat effectief mijn documentatie (prima; helaas zitten lang niet overal unit tests bij).
Het tweede voorbeeld slaat door, en FO én controle. Wat als we de lijntjes tussen een analist en ontwikkelaar korter maken i.p.v. direct code reviews door te voeren en moeite nemen een TO op te stellen die vervolgens toch niet up-to-date wordt gehouden? Beide kosten toch extra resources. Of toch eens een keer wat pair programming met een senior developer bij het starten van een nieuw FO?
Ik noem hier de extremen ad-hoc en planned, en agile is wat mij betreft een variabele grens van gewenste formaliteit. Die formaliteit neemt toe/af door een waslijst aan variabelen (omvang, klant karakteristieken, kosten, wet & regelgeving, ...) en creëert de noodzakelijke (kortstondige) stabiliteit om vooruit te komen en je hoofddoelen te behalen, dus:
Ad-hoc (impliciet) --|-X-|------- Planned (expliciet)
Met X als een formaliteitsideaal en de |...| als Agile Margin (ik verzin het maar ter plekke).
Nu is dit nog maar één dimensie (ik heb er gezien met 9 die alleen Agile en Planned uitdrukken) maar hier al durf ik te stellen dat binnen de Agile Margin blijven bijzonder lastig kan zijn; hoe weet je welke expliciete procesaanpak je nodig hebt om het project tot een goed einde te brengen? Als je regelmatig reflecteert op je procesaanpak en formaliteitsideaal nastreeft dan ben je wat mij betreft goed bezig. Als je je zinnen zet op het toepassen van Xp/Scrum dan kun je in mijn ogen per definitie niet 'Agile' zijn. Evengoed zijn de meeste bedrijven dus wel -mogelijk onbewust- Agile bezig; gevoelsmatig komen we een heel eind. Het is alleen jammer dat dit proces zo pijnlijk kan zijn voor alle betrokkenen en we er pas werk van maken als het ons direct belemmerd in ons functioneren.
Van wat ik gelezen heb over Agile volgen de meeste Agile gurus deze redenering; de nadruk in de praktijk ligt hier echter vaak niet.
Handiger dan XP/scrum/etc. vind ik organizational patterns (een soort van voorloper en inmiddels paralelle stroming aan Agile). Er zitten ontzettend veel overeenkomsten in de twee en ze lenen veel onderlinge concepten aan elkaar uit. Patterns verschillen met Agile dat dit kleine best practices zijn op organisatieniveau (verwant -en vaak zelfs op dezelfde manier beschreven als- design patterns) die de meeste van ons vanzelf wel verzinnen en toepassen; ze geven alleen duidelijk aan waarmee ze verwant zijn en vormen zo een pattern language; een set aan best practices die elkaar versterken. XP, Scrum, RUP, etc. kun je zien als instanties van zo'n pattern language. Door te makkelijk te spreken over wat XP en Scrum zijn zien we niet hoe de individuele practices elkaar horen te versterken en werken we uiteindelijk met een halfbakken instantie van wat individuele best practices.
Hier is een voorbeelden van wat (bijna triviale maar daarom niet minder belangrijke) patterns:
http://users.rcn.com/jcoplien/Patterns/Top10OrgPatterns.html
Een daily meeting is bijvoorbeeld zo'n pattern (waarvan ik uitga dat binnen softwareontwikkeling deze praktijk voor het eerst in Scrum beschreven is, maar zeker weet ik dit niet; ben er wel zeker van dat dit al veel eerder en buiten softwareontwikkeling gangbaar was).
Je hebt een hele bak literatuur van die patterns, met name Organizational Patterns of Agile Software Development geeft de link tussen beide goed aan en is gelijk een goed naslagwerk van dergelijke patterns.
Ik denk dat je binnen die patterns het beste antwoord kan vinden op 'Is Waterval nog nuttig'? Elk element van je procesaanpak kan je formaliseren, de grote vraag is waarom je dat wilt. Bouw je pacemaker-software dan zou ik je testprocedures zo duidelijk maken dat een kind nog weet wat er precies gedaan moet worden, je wilt volledigheid kunnen garanderen. Maakt het dan veel uit of je ontwikkelproces daarvoor formeel is? Wat mij betreft totaal niet; als je het werkend krijgt schep je mogelijk de ruimte om sneller te innoveren. Of je dat aandurft of kan door wet en regelgeving is een tweede.
[
Voor 8% gewijzigd door
Verwijderd op 12-04-2011 08:39
]