Ik ben een aantal boeken aan het doorbladeren over software architectuur en software methodologieen zoals agile development, test driven development, feature driven development, XP etc en ik zie hierin iedere keer mijn eigen onduidelijk over projectplanning bevestigd worden. Als iemand mij vraagt hoe lang iets gaat duren, dan moet ik eerlijk toegeven dat ik daar niet echt een goed antwoord op kan geven. Soms duurt iets langer en soms duur het korter. Meestal geef ik voor de grap dan mijn eigen tijdsregel:
neem de tijd die je denkt nodig te hebben, vermendigvuldig dit met drie en dan heb je nog te weinig.
Ik zie deze wazigheid ook terug in deze methodologieen. Ze willen zelfs steeds meer afstappen van een stugge document-driven methodologieen omdat veel documenten worden geschreven omwille van de methodologie en niet omwille van de programmeur. Daarnaast zijn de meeste documenten snel verouderd omdat als iets eenmaal is geimplementeerd, de documenten niet meer worden bijgewerkt (dus ook niet na refactoren zoals dat in principe overal wel moet gebeuren). Hierdoor steek je enorm veel werk in iets wat je later al bijna niet praktisch meer kan gebruiken en eigelijk alleen zorgt voor een verkeerd beeld.
Ik weet intussen van 2 matige oplossingen om het gat tussen code en model/document te verkleinen.
1) UML -> code en code->UML. Maar persoonlijk vind ik UML dat meteen te vertalen valt naar code net zo interessant als de code zelf en zie ook de meerwaarde hier niet van in. Alleen om het duidelijk te maken naar anderen (of jezelf) of om hogerop in je ontwerp te gebruiken vind ik UML een toegevoegde waarde hebben, maar niet als UML op hetzelfde abstractie nivo zit als je code.
2) MDA -> Model driven architecture. Aan de hand van modellen ga je code genereren. Het probleem aan deze modellen is dat je eigelijk vrij vast komt te zitten in de mogelijkheden van de code generatoren en van de beschikbare model-transformaties. Deze oplossing om het gat tussen code en documentatie te verkleinen vond ik zelf niet echt interesssant.
Een ander nadeel aan de stugge aanpakken is dat ze eigelijk te veel van te voren willen plannen en geen rekening houden met de veranderende natuur van software ontwikkeling. Het is een feit dat er altijd nieuwe requirements komen en dat je met de document-driven aanpak veel werk voor niets hebt gedaan. Verder valt van te voren ook niet altijd te bepalen hoe iets eruit moet komen te zien, omdat je daar eigelijk nog geen goed beeld van hebt.
Daarom zie je bij de bovengenoemde lichtere methodelogieen ook vaak dat niet te veel tijd in een ontwerp gestoken moet worden. Dit wil niet zeggen dat je maar een beetje ad-hoc alles in elkaar moet zetten (dit was het 1e waar ik aan moest denken), maar dat je een ontwerp zo op moet zetten dat veel interne structuren daaruit volgen, maar als het nodig is om het aan te passen, dat dit ook mogelijk moet zijn.
Zoals je ziet gaat het dus om vrijheid en het niet in de puntjes bepalen van alle details omdat dit gewoon niet mogelijk is. Maar als alles zo flexibel is, hoe maak je dan een planning? Hoe kan je een indicatie geven van hoe lang iets gaat duren? Als je ervaring hebt met een bepaald type product dan kan je aan de hand van die kennis wel een schatting doen, maar als je een volledig nieuw product ontwikkeld dan heb je geen referentie punten en een schatting doen is dan net zo trefzeker als bellen naar de tv-spelletjes waar altijd 5 minuten voor het einde van het programma de prijs wordt gewonnen.
Mijn vraag is dus hoe je moet gaan plannen?
neem de tijd die je denkt nodig te hebben, vermendigvuldig dit met drie en dan heb je nog te weinig.
Ik zie deze wazigheid ook terug in deze methodologieen. Ze willen zelfs steeds meer afstappen van een stugge document-driven methodologieen omdat veel documenten worden geschreven omwille van de methodologie en niet omwille van de programmeur. Daarnaast zijn de meeste documenten snel verouderd omdat als iets eenmaal is geimplementeerd, de documenten niet meer worden bijgewerkt (dus ook niet na refactoren zoals dat in principe overal wel moet gebeuren). Hierdoor steek je enorm veel werk in iets wat je later al bijna niet praktisch meer kan gebruiken en eigelijk alleen zorgt voor een verkeerd beeld.
Ik weet intussen van 2 matige oplossingen om het gat tussen code en model/document te verkleinen.
1) UML -> code en code->UML. Maar persoonlijk vind ik UML dat meteen te vertalen valt naar code net zo interessant als de code zelf en zie ook de meerwaarde hier niet van in. Alleen om het duidelijk te maken naar anderen (of jezelf) of om hogerop in je ontwerp te gebruiken vind ik UML een toegevoegde waarde hebben, maar niet als UML op hetzelfde abstractie nivo zit als je code.
2) MDA -> Model driven architecture. Aan de hand van modellen ga je code genereren. Het probleem aan deze modellen is dat je eigelijk vrij vast komt te zitten in de mogelijkheden van de code generatoren en van de beschikbare model-transformaties. Deze oplossing om het gat tussen code en documentatie te verkleinen vond ik zelf niet echt interesssant.
Een ander nadeel aan de stugge aanpakken is dat ze eigelijk te veel van te voren willen plannen en geen rekening houden met de veranderende natuur van software ontwikkeling. Het is een feit dat er altijd nieuwe requirements komen en dat je met de document-driven aanpak veel werk voor niets hebt gedaan. Verder valt van te voren ook niet altijd te bepalen hoe iets eruit moet komen te zien, omdat je daar eigelijk nog geen goed beeld van hebt.
Daarom zie je bij de bovengenoemde lichtere methodelogieen ook vaak dat niet te veel tijd in een ontwerp gestoken moet worden. Dit wil niet zeggen dat je maar een beetje ad-hoc alles in elkaar moet zetten (dit was het 1e waar ik aan moest denken), maar dat je een ontwerp zo op moet zetten dat veel interne structuren daaruit volgen, maar als het nodig is om het aan te passen, dat dit ook mogelijk moet zijn.
Zoals je ziet gaat het dus om vrijheid en het niet in de puntjes bepalen van alle details omdat dit gewoon niet mogelijk is. Maar als alles zo flexibel is, hoe maak je dan een planning? Hoe kan je een indicatie geven van hoe lang iets gaat duren? Als je ervaring hebt met een bepaald type product dan kan je aan de hand van die kennis wel een schatting doen, maar als je een volledig nieuw product ontwikkeld dan heb je geen referentie punten en een schatting doen is dan net zo trefzeker als bellen naar de tv-spelletjes waar altijd 5 minuten voor het einde van het programma de prijs wordt gewonnen.
Mijn vraag is dus hoe je moet gaan plannen?
[ Voor 19% gewijzigd door Alarmnummer op 19-08-2003 08:05 ]