05.01.08
Enveckasiterationer del II
I ett tidigare inlägg berättade jag om hur vi har arbetat i mitt senaste team. Vi arbetar med enveckasiterationer, men det har vi inte alltid gjort. Tidigare har vi använt tre veckors iterationslängd. I detta inlägg tänkte jag kontrastera lite hur det är att gå från tre veckor till en vecka.
Fördelar
- Planeringsmötet tar inte en tredjedel av tiden, vilket man kan tro, snarare en femtedel. Detta kan delvis förklaras av att vi kan förenkla och hoppa över vissa moment. Typiskt tar det en dryg timme men igår gjorde vi den på 45 minuter. Tidigare tog det 6 – 8 tim, för tre veckors arbete. Detta är givetvis bra då teamet istället kan lägga denna tid på att producera nytta.
- Ett skäl till att planeringsmötet blir kortare är att vi slipper estimera uppgifter, dvs våra nedbrutna user stories. Vi har nått en bra nivå och våra uppgifter är oftast relativt små. Så vi förenklade och provade istället att bara räkna kort. Vi får 15 – 20 st på tre veckor. Det verkar fungera precis lika bra.
- Antal och storlek på felestimeringar har minskat betydligt. Ju större arbetsmängd man ska estimera, desto större är naturligtvis risken att man har hamnat en bit fel. Med en veckas arbete är det mindre risk, även om vi i början var ganska dåliga på att få det rätt. En sprint estimerades till 6 poäng och när den började närma sig sitt slut fick vi lyfta ut 5 poäng. Nu har vi inte missat på många veckor.
- Antalet uppgifter/kort räcker för att se status. Vi behöver därför inte att hålla koll med en sprintförbränningsgraf (eng. ”sprint burndown chart”). I början fortsatte vi att rita den men, herrejösses, det är 4 dagar vi talar om! Det behövs inte. Sprintplanen är redan hanterbar och överblickbar.
- Produktägaren gillar det. Hon kan välja att driftsätta varje vecka. Är något värdefullt för organisationen klart så får de ut detta till användarna på snabbast möjliga sätt. Leantankar omsatt i praktiken.
- Möjligheten till omprioritering och nya tag nästa vecka skapar ett lugn och en flexibilitet hos produktägaren. Om något inte får plats så är det bara en vecka till nästa chans. Vi slipper många debatter om vad som är viktigt just nu.
Nackdelar
- Givetvis kan kortare iterationer ge upphov till oproportionerligt stor andel transaktionskostnad, dvs tid att sätta upp och och avsluta varje iteration. Men som jag berättade ovan är vår erfarenhet snarare den omvända, om man kan utnyttja de förenklingar som man kan göra med en mindre omfattning.
- En annan risk är att leveranserna tar för mycket tid, relativt sätt. Detta hände oss. Vår infrastruktur för leveranser höll inte måttet när vi gick till leverans varje vecka. Man kan välja att se detta som att vi blev avslöjade. Vi sänkte vattnet i floden tills dess att båten gick på grund, för att använda en leanmetafor. Lösningen är förstås inte att gå tillbaka till treveckorsiterationer utan att bli bättre på att leverera. Vi förbättrade våra byggskript, vi blev bättre på att följa IT-enhetens rekommenderade driftsförfarande, vi skärskådade beroenden på vårt system och minimerade vår exponering för att möjliggöra leverans utan att alla beroende system också måste leverera om. Att tvingas att bli bättre kanske egentligen ska ses som en fördel?
Så, borde alla team köra med en vecka?
Nej, det kan man inte säga. Jag kan bara säga att våra erfarenheter har varit mycket goda, så om man har möjligheterna tycker jag definitivt att man ska prova. Det har i alla fall gjort oss ett par snäpp mer agila.
Hur vet jag om vi kan prova enveckasiterationer?
Svårt att säga, men här är i alla fall en lista på vad jag tror är nödvändiga förutsättningar:
- Mogen produktägare och kundteam som är duktiga på att förbereda planeringsmöten, prioritera och formulera user stories.
- Engagerad, samlokaliserad produktägare
- Moget team som är duktiga på agil metodik. De ska vara vana att hålla effektiva, tidsbegränsade möten.
- Automatiserade systembyggen och leveranser
- Troligen krävs ett relativt litet projekt, ett eller några team stort.
Något att fundera på
Så… om tremånadersiterationer är bättre än ett år långa, om enmånadsiterationer är bättre än tre månader och en veckas iterationslängd är bättre ändå, varför sluta där? Det är en relevant fråga. Om vi kan leverera på en vecka, varför inte varje dag? Eller, i förlängningen, kontinuerligt. Leveranser som bara en ständig ström av kontinuerligt värdeskapande. Ja, varför inte?
04.30.08
Enveckasiterationer
Många team använder Scrum och tycker att iterationer på tre veckor är häftigt snabbt. Allt är relativt. Vi beslöt oss vid årsskiftet för att gå över till en iterationslängd på en vecka och se vad som hände. Vi kände oss mogna för detta och produktägaren efterfrågade fler leveranser. Här följer en kort beskrivning av hur vi arbetar.
Kort bakgrund
Teamet har bestått av 5-8 pers varav 2-3 personer har ägnat sig åt produktägaruppgifter. Systemet är ett webbaserat, administrativt system för att hantera utbildningsobjekt på en akademisk institution i Stockholm. Metodikmässigt har vi använt en kombination av Scrum och XP. Vi strävar efter 100% testdriven produktionskod, vi använder acceptanstester i Fitnesse för att driva utvecklingen och vi har obligatorisk parprogrammering av all produktionskod. Vi har historiskt sett nästan helt använt iterationslängd på tre veckor. Projektet har pågått i ett drygt år så teamet är väl sammanslutet, metodikdrivna och bra på att leverera.
Förberedelser
Vår produktägare är en pigg dam från Norrbotten. Hon får stöd och övergripande prioriteringar från en kundgrupp av viktiga intressenter som träffas med en månads mellanrum, ibland oftare. I teamet har produktägaren stöd av en assisterande produktägare, på deltid, en UX-designer (användbarhetsexpert) på halvtid och Scrummäster. Produktägaren och hennes team arbetar parallellt med att prioritera och förfina user stories (enkla kravrepresentationer) inför kommande iteration.
Sprintplanering
Hela teamet samlas normalt på onsdag morgon kl 9.00 för sprintplanering. Mötet sker i stort sett enligt Scrums riktlinjer, bara mycket kortare. Produktägaren presenterar user stories i prioriteringsordning. Teamet diskuterar dessa och tar med hjälp av planeringspoker fram ett grovt estimat av varje user story i poäng (relativt mått på svårighetsgrad och arbetsinsats). Poängen ligger nästan alltid mellan 0,5 och 5 med 0,5 och 1 som vanligaste estimat.
Teamet åtar sig en veckas arbete baserat på magkänsla. Kunden beskriver sprinten med ett sprintmål. Varje user story bryts därefter ned i uppgifter som inte estimeras. Hastighet mäts istället i antal uppgifter per vecka och ligger normalt på 15-25.
Både user stories och uppgifter representeras av kort. Sprintplanen består av kort i grupper per user story i sekvens. Korten sätts upp på en whiteboard med kolumner för Åtaget, Pågår, Klart. Detta avslutar sprintplaneringen och tar 1 – 1,5 tim.
Under sprinten
Morgonmöte sker varje morgon under veckan kl 9 framför sprintplanen och tar normalt ca 5 min. Utvecklare tar en uppgift genom att sätta sina initialer på kortet och flytta det till Pågår. När uppgiften uppfyller våra klarkriteria får den flyttas till Klart.
Vi arbetar användningscentrerat, med en UX-designer som genomför workshops och användartester parallellt med övrigt arbete. Hon delar sin tid mellan detta och att hjälpa teamet skapa en god interaktionsdesign. Teamet förevisar kontinerligt framsteg för produktägaren, som också bistår med testning av applikationerna.
Avslutning
Sprinten avslutas med en kort demonstration för produktägaren och de som vill av kundteamet varje tisdag kl 13.00 och tar ca 30 min. Var tredje vecka har vi istället längre demonstrationer för alla som vill se kl 09.00. Dessa tar 1-1,5 tim. Vi har fortsatt att ha stora demonstrationer med treveckorsintervall helt enkelt då många intressenter har inte tid att komma varje vecka, men de vill ändå se allt som hänt sen sist.
Varje iteration avslutas med ett kort sprintretrospektiv på ca 30 min. Var tredje vecka är det längre, ca 1,5 tim. En mindre del av sprinten avsätts till internt effektiviseringsarbete. Retrospektiv har vi normalt i samband med sprintplaneringen för nästa sprint.
11.24.07
Ny kurs: TDD – Inte bara enhetstestning
Observera: Detta inlägg består till största del av reklam för vår nya kurs. Sluta läs här om du inte gillar sånt.
Testdriven utveckling (TDD) och relaterade arbetssätt är en teknisk grundpelare inom agila metoder. TDD är nyckeln till att skapa högre produktivitet och ändå få högre kvalitet på resultatet (det är ingen motsättning). Men det är inte så lätt som det ser ut och det påverkar även personerna runt utvecklingsteamen.
Är du eller din organisation nyfikna på TDD? Eller vill ni komma igång, men vet inte exakt hur? Eller har ni redan kommit igång men får inte ut de fördelar som ni hade hoppats på? I så fall kanske vi har vad ni behöver.
Terrier Software och Dynabyte har tillsammans utvecklat ett modulärt system av utbildningsmoment inom TDD, från 1 timmes introduktion till tre dagars kurs. Målgruppen är systemutvecklare, testare, kravanalytiker och ledare för utvecklingsarbete. Utbudet är iterativt upplagt och består av moduler som enkelt kan anpassas till era behov.
Nyckelord vid utvecklingen har varit helhetssyn, praktik och attityd. Helhetssyn i betydelsen att vi täcker in många sätt att se på TDD, från mikrotester till storytester. Vi berättar också om hur TDD påverkar personer i olika roller, från programutvecklare till kravanalytiker och projektledare. Praktik har varit ett ledord och vi hoppas att det ska märkas i våra otaliga praktiska tips samt alla övningar och laborationer. Till sist, attityd, både att vi vågar säga det vi står för och stå för det vi säger, men också att TDD till sist handlar om ett ödmjukt sätt att utveckla. Vi hoppas att denna ödmjukhet inför våra egna begränsningar ska genomsyra kursen.
Är du intresserad av kursen, kontakta mig på info@terriersoftware.se.
07.03.07
TDD-föredrag på Avega
Förra veckan fick jag tillfälle att praktisera bowlingkatan på nytt då jag var inbjuden att hålla ett TDD-seminarium för en grupp konsulter på Avega. Jag fick en trevlig stund och jag hoppas att jag eventuellt lyckats inspirera någon till att jobba mer testdrivet. En av åhörarna, Joakim Sundén, har på ett trevligt sätt sammanfattat sina intryck. Tack för det, Joakim.
05.23.07
Regler för parprogrammering
Så du har snöat in på XP och parprogrammering? Kanske provat på lite? Provat med någon du inte känner så bra? Gick det bra?
Faktum är att för att vara en sak som är simpel att förstå så verkar parprogrammering obehagligt enkelt att inte riktigt få till. Många parprogrammeringssessioner är tyvärr oproduktiva, tråkiga eller, till och med, otrevliga.
I vårt team (projekt KOPPS del 2 på KTH) tog vi tag i det efter att ord som ”dålig parprogrammeringssession” förts fram några gånger på våra sprintretrospektivmöten (ett internt feedbackmöte efter en iteration). Så jag höll ett litet seminarium och vi läste några artiklar. Och framför allt: Vi diskuterade och enades om några regler som jag tänkte bibringa er här.
OBS! Det här är några regler som vi har kommit överens om och som verkar fungera i vårt projekt. Jag rekommenderar att ni hittar er egen modell, men detta kanske kan fungera som inspiration.
Not: Vi är fem programmerare i teamet, dvs ett udda antal. Därav specialregler för hantering av detta.
(Våra) Regler för parprogrammering
- En förare (taktik) – En kartläsare (strategi)
- Flytande par – ej fasta
- Börja med nedbrytning av varje uppgift. Hitta delmålen.
Motiv: Med en lista av delmål kan ett par enklare hitta en nöjaktig punkt att avbryta samarbetet och rotera. - En person tar ansvar för varje uppgift.
- För en ny partner, förklara uppgiften och tänkt lösning.
- Berätta vad du vill göra. Fråga om du ej hänger med.
- Kom ihåg att det är vi som löser uppgiften.
- Kritisera inte – samarbeta.
- För en att-göra-lista parallellt med arbetet. Den ska vara tom för att vara klar.
- Håll igen något med att påpeka småfel till du är säker på att föraren verkligen missat det.
- Håll igen med större fel, skriv upp dem på att-göra-listan istället.
- Tag många pauser, minst 5 min/tim.
- Checka in ofta, en handfull gånger på en dag är helt normalt.
- Behöver ej parprogrammeras: ”Klurning”, ”spikar”, testkod
- Vid jämna par: Minst byte lunch och kl 15.
- Vid ojämna par: ”Korta byten”, dvs oftare och gärna osynkat mellan paren.
- Prova på: ”Ping-pong”, dvs skriva tester åt varandra i turordning.
- Prova på: Börja varje mening med ”Ja,och…”. Förbjudet att säga ”Ja, men…”.
- Alltid: Ödmjukhet och Respekt.
Vi tar gärna emot tips, vilka regler använder ni?