Sprint (programvareutvikling)

Innen scrum og andre rammeverk for smidig programvareutvikling er en **sprint** eller **scrumsprint** en repeterbar tidsboks med fast størrelse hvor man førsker å levere et "ferdig" produkt med så høy verdi som mulig. Sprintsyklusen er en del av kjernen til smidig utviklingsmetodikk, og kan sees på som en hendelse som omfavner alle de andre prosessene i scrum-rammeverket, inkludert oppstartsmøter (*sprint planning session*), den daglige scrummen (*daily scrum*), scrumgjennomgang (*scrum review*) og evalueringer (*sprint retrospective*). Som med alle andre scrum-hendelser har sprinten også en maksimal varighet. Vanligvis varer en sprint en måned eller mindre.

Vanligvis arrangeres det daglige møter for å diskutere fremdriften til prosjektet og eventuelle utfordringer som teammedlemmene har støtt på under implementasjonen. Utfallet av sprinten skal være en leveranse (*deliverable*), selv om denne kan være inkrementell. Scrum brukes blant annet i prosjekter innen webteknologi eller til utvikling av produkter for nye marked, altså produkter hvor det er mange krav eller kravene endrer seg hurtig.

## Historie
Scrumsprinten oppstod tidlig i 1990-årene da Ken Schwaber jobbet med Mike Smith og Chris Martin, og Jeff Sutherland jobbet med Jeff McKenna. I 1995 presenterte Ken Schwaber og Jeff Sutherland Scrum på OOPSLA-konferansen.

## Verdier
Nøkkelfunksjonen til en sprint sammenlignet med andre prosjektmetodikker er den faste tidsrammen. I begynnelsen av sprinten defineres noen mål som man deretter arbeider ut ifra og går gjennom grundig i løpet av sprinten. Dersom man under gjennomgangene oppdager noe som vil innebære avvik i produktet forsøker man å gjøre justeringer så snart som mulig for å kontrollere ytterligere avvik. Sprinten tar dermed sprintkøen (*sprint backlog*) som innputt, og gir en inkrementell leverbar versjon av produktet som utputt. For å oppnå dette har sprinten de grunnleggende verdiene åpenhet, inspeksjon og tilpasning. Åpenheten skal sikre at alle interessenter har en felles forståelse av hva som anses som "ferdig" (*done*). Inspeksjon og tilpasning bidrar til å kontrollere eventuelle avvik slik at man ved slutten av sprinten leverer et produkt med maksimal verdi. Umiddelbart etter at en sprint er avsluttet følger neste sprint.

## Terminologi
Sprint fungerer sammen sprintkø (*sprint backlog*), daglig scrum (*daily scrum*), sprintgjennomgang (*sprint review*) og andre slike hendelser.

### Sprintkø
Sprintkøen refererer til en undergruppe av produktkøen som har blitt valgt ut for en sprint, sammen med sin leveranseplan. Basert på elementene i sprintkøen bestemmer utviklingsteamet hvordan de skal lage et "ferdig" produkt.

### Daglig scrum
Daglig scrum er et møte på et fast tidspunkt (og gjerne fast sted) hvor utviklingsteamet kan synkronisere og planlegge arbeidet for de neste 24 timene basert på mengden arbeid som ble fullført siden sist daglige scrum. Under den daglige scrummen svarer medlemmene av utviklingsteamet på spørsmål som:

* Hva gjorde jeg i går som hjalp meg mot et sprintmål?
* Hva skal jeg gjøre i dag for å jobbe mot sprintmålet mitt?
* Hvilke hindringer ser jeg for meg kan stoppe meg fra å oppnå sprintmålet mitt?

Den daglige scrummen varer vanligvis i 15 minutter, men kan følges opp av andre møter for mer detaljerte diskusjoner.

### Sprintgjennomgang
Sprintgjennomgangen holdes etter at en sprint er ferdig. Teamet og interessentene undersøker hvor mye arbeid som er gjort. Produkteieren tilpasser produktkøen om nødvendig. Sprintgjennomgangen er (i likhet med sprintevalueringen) en mulighet for inspeksjon og tilpasning på slutten av hver sprint.

### Sprintevaluering
Sprintevalueringer eller retrospektiv (*sprint retrospective*) brukes for å analysere hva som gikk bra i sprinten og hva som kan forbedres. Scrumteamet undersøker prosessen som ble brukt for å bygge dette inkrementet. Tilbakemeldingene fra evalueringen brukes for å forbedre prosessene i den påfølgende sprinten. Sprintevalueringen er (i likhet med sprintgjennomgangen) en mulighet for inspeksjon og tilpasning på slutten av hver sprint.

## Roller
Det er bare tre roller innen scrum: 

* Produkteier (*product owner*)
* Scrumleder (*scrum master*)
* Utviklingsteam eller utviklerteam, også kalt scrumteam (*scrum team*)

### Produkteier
Produkteier er ansvarlig for produktets nåværende utviklingstilstand og for å maksimere produktets verdi. Produkteier kan være én person, selv om den personen representerer en komité. Arbeidsoppgaver inkluderer:

* Vedlikeholde elementene i produktkøen
* Sortere rekkefølgen på elementene køen
* Sikre at elementene i produktkøen er klare for utviklingsteamet.

### Utviklingsteam
Utviklingsteamet er ansvarlige for gjennomføringen av elementene i sprintkøen. Selv om medlemmene i teamet kan spesialisere seg på ulike områder er utviklingsteamet i sin helhet ansvarlige for utvikling av funksjonalitet.

## Prosessflyt
Scrumprosjektet starter med en idé om å bygge et system. I begynnelsen kan prosjektvisjonen være noe tvetydig, men etterhvert som prosjektet utvikler seg bør teammedlemmene begynne å få et klart bilde av det ønskede systemet. Produkteierens rolle er å utforme strategien, utforme produktkøen og levere prosjektet i tråd med visjonen til de som finansierer prosjektet. Det opprettes deretter en prioritert prosjektkø (*project backlog*) hvor kjernefunksjonaliteter tildeles høyeste prioritet. Til sammenligning kan ytterligere funksjoner overlates til det inkrementelle produktet. Hovedmålet vil da være å oversette denne prioriterte listen til et "ferdig" produkt.

Hver sprint starter ned et sprintplanleggingsmøte og varer i 30 dager eller mindre. I møtet diskuterer utviklingsteamet, scrumlederen og produkteieren de prioriterte elementene fra produktkøen. Utviklingsteamet diskuterer og presenterer sine synspunkter om gjennomførbarheten av oppgavene. Når gjennomførbarheten er bestemt blir klargjorte oppgaver diskutert og tildelt medlemmene av utviklingsteamet. Deretter følger andre fase av møtet hvor bare utviklingsteamet diskuterer planen for arbeidet.

Daglige scrummer holdes hvor teamet diskuterer nåværende tilstand av arbeidet og eventuelle hindringer de har støtt på. Hurtige justeringer gjøres dersom man observerer avvik.

På slutten av sprinten tar teamet, scrumlederen og produkteieren en vurdering av sprinten, og planlegger deretter for påfølgende sprint.

## Se også
* Scrum
* Prosjektledelse
* Smidig utviklingsmetodikk

## Referanser