Agile

Agile werken zonder vergaderen en zonder regels

Agile betekent “slagvaardig” of “lenig” of “flexibel”, of zelfs “wendbaar”. Het kan een heleboel betekenen. Wat het volgens mij in ieder geval niet betekent is “veel vergaderen” of “strenge regels en richtlijnen” en al helemaal geen “checklists”.

Ter illustratie heb ik een stukje geschreven over hoe je een agile project kunt starten, met een Project Startup Hackathon. Daarnaast heb ik een blogje geschreven met tien tips voor de agile manager.

Nog meer ideeën en gedachten over Agile werken en Agile project management heb ik opgeschreven in mijn boek Agile zoals het bedoeld is. Ik vind dat voorschriften en regels niet goed bij Agile passen. Ik vind eigenlijk dat het schrijven van een boek over Agile een paradox is. Vandaar dat je in mijn boek geen schema’s vind, geen voorschriften of regels, maar alleen ideeën en anekdotes. Zoals het hoofdstuk “Een weekendje naar Parijs”.

Agile, Programming

Nieuwe features in software: hoe beslis je welke je bouwt? #Agile

Nichtje had zichzelf getekend in de brief

Ik heb een site gebouwd, en ik bouw daar nog aan, waarin ik de brieven van de familie Schwartze archiveer en documenteer. Vooralsnog ben ik zelf de enige gebruiker van de site. Ik had kunnen beginnen met een site en een API en een database met alle functionaliteit die ik kon bedenken. Dat was veel werk, en dan had ik in de loop van de tijd veel moeten veranderen wegens voortschrijdend inzicht.

Dus ben ik minimaal begonnen: met alleen een database waarin ik data heb ingevoerd met SQL. Die database heb ik geconverteerd naar een netjes gestructureerde database, op basis van wat ik inmiddels over de content had geleerd. Toen wilde ik een overzicht van alle brieven, dat heb ik gemaakt met ReactJS. Brieven hebben afzenders en ontvangers, die wil ik documenteren, dus heb ik daar features voor gemaakt. Minimalistisch, maar wel functioneel.

Nu ben ik in het stadium dat ik de toekomstige bezoekers van mijn site in het vizier heb, en ik kan allerlei functies en features bedenken die ze misschien handig vinden. Maar dan ben ik daarmee maanden aan het programmeren terwijl ik ook de content nog compleet moet maken. Ik kan ook niets meer bijprogrammeren en me concentreren op de content, maar dan maak ik steeds meer work-arounds wegens missende features. Wat ik dus doe is het volgende: iedere keer als ik een nieuwe feature bedenk, dan programmeer ik die niet, maar verzin een work-around met de bestaande software. Pas als ik voor de derde keer die feature zou willen gebruiken, bouw ik ‘m erbij. Dan weet ik inmiddels ook meer in detail wat die feature moet doen.

Als voorbeeld: een brief heeft één afzender, degene die de brief schrijft. Maar soms is er een briefje van tante waar een nichtje een velletje heeft bijgevoegd: dan zijn er twee afzenders. Dat hoeft niet per se zichtbaar te zijn in de database, als tante de afzender is, is het duidelijk genoeg. Totdat ik voor de derde keer twee brieven in één envelop had, toen heb ik alles zo gemaakt dat je meerdere afzenders kunt hebben voor één brief. Hetzelfde gebeurde voor de ontvangers: tante schrijft een brief aan de drie nichtjes.

Ik wilde kunnen zoeken in de brieven, dus heb ik met Apache Lucene een zoekfunctie gemaakt op de content van de brieven. Wat ik nog niet heb is een zoekfunctie op afzenders of ontvangers in de database. Ik blader alfabetisch door de brieven om iemand te zoeken. Dat wordt nu hinderlijk, dus ik ben nu op het punt een zoekfunctie te maken voor afzenders en ontvangers en locaties en dergelijke.

Ik werk dus efficient: ik besteed minimale tijd aan het bouwen van de web site en de API en wat daarbij hoort zodat ik maximaal tijd heb voor de inhoud, waar het tenslotte om gaat. Als ik inhoud af is, en ik er een boek over heb geschreven, dan heb ik tijd om de features toe te voegen die ik zelf nu niet nodig heb maar die voor bezoekers van de site handig zijn. Zodat als het boek verschijnt, ook de site optimaal is.

Deze aanpak klinkt simplistisch, maar ik denk wel dat je ieder project zo zou moeten doen. Je verzint met z’n allen de absolute bare bones structuur van je applicatie of web site, en je bouwt dat. Dan gaan gebruikers aan de slag en pas als ze een feature echt missen, dan bouw je die erbij. Je backlog krijgt dus een extra column: “aantal verzoeken”. Pas als tien gebruikers een feature in de praktijk node missen, bouw je die erbij. Niet met toeters en bellen, maar alleen de minimale feature waar gebruikers of klanten om hebben gevraagd. Is er dan een toeter of een bel die ze nog missen, dan gaan ze vanzelf piepen en bouw je de toeter of bel erbij.

Agile, Programming

What is software quality, and how do you manage it in an agile project?

You have been in this situation. You work on a user story, the story has been estimated for 5 story points. And you know how it goes, the team or the manager translated that to 20 hours of work. While thinking about the code that is needed, you see that existing code, created in previous user stories, needs to be refactored to accomodate the new bits. That is, if you want the code base as a whole to be of high quality.

read more