Tagcloud

Story decompositie – Deel 1

Geschreven door: gertjan oude vrielink

De juiste omvang van user stories en onderliggende taken kan het verschil maken in het slagen of falen van Scrum. Krijg je het werk niet af in een sprint? Zijn de schattingen slecht? Loopt de Daily Scrum niet lekker? Je zou in eerste instantie niet direct een verband leggen, maar dit zijn typische symptomen van werk dat niet de juiste omvang heeft! (In een apart blog zal ik die relatie eens toelichten, maar ik nodig de lezer graag uit zelf dit verband te leggen.)

Een user story start meestal als een feature of epic, een minder concreet concept van iets dat we voor een gebruiker van een systeem, of degene die belang bij heeft, willen realiseren. Features en epics kunnen we (versimpeld) beschouwen als grote user stories, samengesteld uit kleinere. Aangezien ze te groot zijn voor een sprint, moet deze (op het juiste moment) verder uitgediept en opgedeeld worden in functioneel zinvolle kleinere delen. Er zijn hiervoor geen specifieke regels. De komende twee blogs geef ik een aantal tips hoe je user stories op kunt delen.

Tip #1: workflow-stappen

Identificeer stappen die een gebruiker neemt om een bepaalde workflow af te ronden en bepaal welke stap in aanmerking komt voor een aparte user story.

Laten we eens kijken naar de ogenschijnlijk eenvoudige user story “Als online boekenkoper wil ik een boek online bestellen zodat ik niet de deur uit hoef”. Alhoewel de intentie en het doel duidelijk is, is deze user story groter dan we in eerste instantie vermoeden. Immers er zijn een aantal user stories te bedenken die zeer waarschijnlijk synoniem worden gezien of ondersteunen in het aankopen van een boek. Denk bijvoorbeeld eens aan het zoeken op bijvoorbeeld schrijver, ISBN of titel. Ook zal een koper in veel gevallen de details van een boek wilt inzien voor aanschaft. En ultiem zal een koper aan het eind van de workflow de mogelijkheid geboden moeten worden om de aankoop te bezegelen. Alle stappen in de workflow leiden tot hetzelfde doel; het aanschaffen van een boek.

Het uitdiepen van de workflow kan bijvoorbeeld leiden tot de user stories:

  • Boek zoeken op titel, ISBN of schrijver
  • Details van een boek bekijken.
  • Biblion recensie bekijken van een boek
  • Recensies van andere lezers bekijken
  • Aanbevelingen van andere kopers bekijken
  • Een boek selecteren in een online winkelmandje
  • Winkelmandje bestellen
  • Betalen en betaalopties
  • Verzendopties (factuur en afleveradres scheiden, cadeaupapier)

Het is de uitdaging om van alle stappen te bepalen welke nu het meeste waarde opleveren in het licht van het doel van de applicatie! Als het doel is om je met een rijke gebruiksvriendelijke website te onderscheiden, dan worden er andere keuzes gemaakt dan een versimpelde website voor een prijsstunter. Het is dan ook van essentieel dat je samen als team begrijpt wat het doel is om niet alleen de juiste prioriteiten te stellen, maar ook oplossingen te kiezen die passen bij het projectdoel.

Tip #2: scenarios 
Gebruikers hebben soms meerdere scenario om hun doel te bereiken. Use cases kennen we als techniek om niet alleen de gewenste functionaliteit te identificeren, maar ook de verschillende mogelijke interactiepatronen tussen gebruiker en machine. Denk bijvoorbeeld bij het versturen van een online aangekocht boek aan de mogelijkheid om een ander verzendadres te kiezen dan het factuuradres. Of aan de mogelijkheid om een boek als cadeau te laten verpakken. Dit zijn alternatief scenario’s naar het zelfde einddoel; het versturen van een boek.

Het identificeren van dergelijke scenario’s zijn in een agile aanpak minstens zo belangrijk. Een agile aanpak dwingt echter geen format af, het is aan het team om hier zorg voor te dragen. Als een user story te groot is, bekijk dan de mogelijkheid of scenario’s zijn die uitgewerkt kunnen worden in een aparte user story.

Tip #3: ‘als er één afgerond is, is de rest een stuk makkelijker’
Stel we hebben de user story “Als online boekenkoper wil ik mijn boek kunnen betalen met Visa, MasterCard, PayPal of iDeal.”. Als we deze splitsen in 4 user stories met elk één van de betaalopties, zou het kunnen zijn dat als we één ervan afgerond hebben de rest een stuk minder werk is. Krijgen ze alle vier dan voorlopig de zelfde omvang voor de benodigde inspanning om ze te realiseren? Nee, dat zou een vertekend beeld geven in onze planning.

Er zijn twee oplossingen. We kunnen proberen een functioneel overlappen deel te isoleren en hier een vijfde user story voor te creëren. De kunst blijft dan om te waarborgen dat elke user story nog steeds waarde levert aan de gebruiker. In dit voorbeeld is het functioneel isoleren van de grootste gemene deler wat lastiger. Immers voor het functioneel afhandelen van een betaling hebben we vrij weinig functionaliteit en relatief meer werk onder de motorkap te doen, om de betaling daadwerkelijk te kunnen afhandelen.

Een andere oplossing is om de user stories als volgt te formuleren:

  • “Als online boekenkoper wil ik mijn boek kunnen betalen met Visa of MasterCard of PayPal of iDeal.”
  • “Als online boekenkoper wil ik mijn boek kunnen betalen met Visa én MasterCard én Paypal én iDeal.”

Deze nieuwe stories zijn weliswaar niet onafhankelijk (de eerste dient eerder geïmplementeerd te worden dan de tweede), maar het levert wel een oplossing voor het schatten van deze user stories.

Tip #4: simpel/complex
Als je merkt dat een bespreking van een user story er toe leidt dat deze story groter en groter dreigt te worden, vraag jezelf dan af wat de simpelste versie is van de user story. Leg die simpele versie dan vast in een user story en creëer voor elke variatie of complexiteit een eigen extra user story. Bij de online aankoop van boeken, kan je vaak kiezen om een of meerdere boeken als cadeau te laten verpakken. Ook kunnen we verschillende afleveradressen opgeven voor boeken in onze bestelling. Tot slot kunnen we aangeven of de verkoper de boeken per afleveradres gebundeld mag versturen of niet. Tegen extra kosten kunnen boeken alvast verstuurd worden voordat de hele bestelling op voorraad is bij de verkoper.

Tip #5: variaties in data
Als content manager van een online boekenwinkel zou de user story “Als content manager wil ik een nieuw boek kunnen plaatsen” kunnen worden opgesplitst in:

  • “Als content manager wil ik een nieuw boek kunnen plaatsen in het Engels”
  • “Als content manager wil ik een nieuw boek kunnen plaatsen in het Duits”
  • “Als content manager wil ik een nieuw boek kunnen plaatsen in het Frans”

In deel 2 van deze blog kijken we verder naar mogelijkheden om een user story te splitsen.

 Wil je op de hoogte gehouden worden van nieuwe blogs, volg ons op Twitter!
Heb je een vraag of opmerking naar aanleiding van deze blog? Neem dan gerust contact op!

  
Problem to solution