Jag har länge funderat över varför uppskattningar inom mjukvaruutveckling så ofta missar målet. Vi vet att de sällan stämmer, men fortsätter ändå att lita på dem som om de vore absoluta sanningar. Det är som att försöka förutsäga framtiden genom att kasta tärningar. Ibland slår man rätt, men oftast inte. Så jag byggde Kassandra, ett verktyg som istället för att ge ett enda tal, visar osäkerheten.

Kassandra är ett Python-baserat kommandoradsverktyg som analyserar historisk sprintdata och beräknar ett 95-procentigt konfidensintervall för teamets leveranskapacitet. Resultatet blir inte en enda siffra, utan ett intervall: “Ni kommer troligen att leverera mellan X och Y story points per vecka.” Det är inte en garanti, men det är ärligt.

Varför konfidensintervall?

Problemet med traditionella uppskattningar är inte att de inte nödvändigtvis är felaktiga, utan snarare att de framställs som exakta. När vi säger “det här tar två veckor”, låter det som en absolut sanning. När det sedan tar fyra veckor blir alla besvikna.

Ett konfidensintervall erkänner att det finns osäkerhet i estimat. Om Kassandra säger att ni med 95 procents säkerhet kommer att leverera mellan 7 och 8,3 story points per vecka, vet alla att det finns en liten chans att ni hamnar utanför intervallet. Men ni vet också att det är osannolikt. Det handlar om att vara transparent med osäkerheten.

Hur Kassandra fungerar

Kassandra är byggt för enkelhet. Du matar in en markdown-fil med en tabell över dina senaste sprintar med kolumnerna “Sprint Name”, “Stories” och “Weeks”. Verktyget gör resten.

Steg för steg:

  1. Filtrering av data: Kassandra använder endast de tio senaste sprintarna. Team förändras, och gammal data kan vara missvisande.
  2. Beräkning av förhållanden: För varje sprint räknas förhållandet mellan story points och veckor.
  3. Statistik: Verktyget beräknar medelvärde och standardavvikelse.
  4. T-värde: Med hjälp av Student’s t-fördelning beräknas konfidensintervallet.
  5. Resultat: Du får ett intervall som visar var din leveranskapacitet troligen ligger.

Varför inte bara använda medelvärdet?

Ett medelvärde kan vara vilseledande. Om ditt team har levererat 7, 8, 7, 8, 7 story points per vecka de senaste fem sprintarna, är medelvärdet 7,4. Men om du planerar för 7,4 och levererar 7, kan det kännas som ett misslyckande – trots att det ligger inom det förväntade intervallet.

Kassandra ger dig ett intervall istället. Om intervallet är 6,8 till 7,9 och du levererar 7, vet du att du ligger inom det förväntade. Det skapar en mer realistisk förväntan.

Installation och användning

Kassandra är enkelt att installera och använda:

1. Klona och installera

git clone https://github.com/matswiklander/kassandra.git
cd kassandra
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate  # Windows
pip install -r requirements.txt

2. Kör verktyget

python kassandra.py sprint_data.md

Där sprint_data.md är en markdown-fil med en tabell över dina sprintar.

Exempel på tabell:

| Sprint Name       | Stories | Weeks |
| :---------------- | :-----: | ----: |
| Sprint 1          |   21    |     3 |
| Sprint 2          |   21    |     3 |
| Sprint 3          |   25    |     3 |
| Sprint 4          |   23    |     3 |

Exempel på resultat:

Team delivery capacity 95% confidence:
  Lower limit: 7.00 stories/week
  Upper limit: 8.30 stories/week

Felhantering

Kassandra är byggd för att hantera verklig data, med all dess ofullkomlighet. Verktyget hanterar:

  • Otillräcklig data: Kräver minst två sprintar med giltig data.
  • Nollvariation: Om alla värden är identiska, returneras samma övre och undre gräns.
  • Division med noll: Hoppar över sprintar med noll veckor.
  • Ogiltig data: Hoppar över rader med icke-numeriska värden.
  • Saknade kolumner: Kontrollerar att obligatoriska kolumner finns.

Varför namnet Kassandra?

I grekisk mytologi var Kassandra en profetia som förutspådde framtiden, men ingen trodde på henne. Det känns passande. Vi vet att våra uppskattningar är osäkra, men vi fortsätter att lita på dem som om de vore sanningar. Kassandra påminner oss om att det finns en osäkerhet och att vi bör planera därefter.

Framtida utveckling

Kassandra är ett enkelt verktyg, men det finns mycket mer att utforska:

  • Visualisering: Rita upp konfidensintervall över tid.
  • Integration: Koppla ihop med Jira eller andra verktyg för automatisk datainsamling.
  • Mer statistik: Lägg till percentiler eller prediktionsintervall.

Avslutande tankar

Kassandra kommer inte att göra dina uppskattningar perfekta. Inget verktyg kan det. Men det kan hjälpa dig att vara mer öppen med osäkerheten och kommunicera den tydligare till ditt team. Och det är ett steg i rätt riktning.

Om du vill bidra, rapportera buggar eller föreslå nya funktioner, är du välkommen att öppna en issue eller en pull request på GitHub. Kassandra är öppen källkod, och alla bidrag är välkomna.

Disclaimer (eller: Varför du inte ska lita blint på detta verktyg)

Kassandra är ett verktyg som försöker gissa hur mycket ditt team kan leverera, ungefär som en väderleksrapport, fast för kod. Den kommer mest troligt att ha fel ibland. Här är vad du bör veta:

  • Kassandra är inte en kristallkula. Den ger dig ett intervall, inte en garanti. Om du planerar hela ditt projekt baserat på detta, är det som att lita på att din katt ska vakta ditt kylskåp.

  • Jag tar inget ansvar. Om ditt team missar en deadline, om din chef får ett utbrott, eller om din produktägare börjar tala i tungor, så är det är inte mitt fel. Kassandra är som en kompass. Den pekar åt ett håll, men det är du som måste undvika att gå rakt ner i en sjö.

  • Använd verktyget med sunt förnuft. Om Kassandra säger att ni kan leverera 200 stories per vecka, men ditt team består av en person som jobbar halvtid och en kanin, då har du antingen hittat världens effektivaste utvecklare, eller så har du hittat en bugg och då vill jag veta det.

  • Jag friskriver mig allt ansvar. Om du använder Kassandra och sedan hamnar i trubbel, är det som att skylla på din GPS när du kör fel. Eller på din mikrovågsugn när maten blir till kol. Eller på din kaktus när den dör. Det är inte verktygets fel, det var livet som hände.

Så använd Kassandra med en nypa salt, en dos humor, och en förståelse för att inget verktyg kan förutsäga framtiden. Men om det hjälper dig att förklara för din chef varför saker tar tid då har det gjort sitt jobb.