Scrum

Scrum on projektinhallinnan viitekehys, jota käytetään yleisesti ketterässä ohjelmistokehityksessä. Vaikka Scrum on kehitetty erityisesti ohjelmistoprojektien hallintaan, sitä voidaan soveltaa myös yleisesti projektinhallinnassa. Ensimmäisinä idean scrumin kehitysprosessista kuvasivat 1986 Hirotaka Takeuchi ja Ikujiro Nonaka. Teoksessaan Takeuchi ja Nonaka kuvaavat uudenlaisen, holistisen lähestymistavan tuotekehitykseen, jossa yksi ainoa monitaitoinen () ryhmä suorittaa kehitysprosessin alusta loppuun vaiheistuksella, joka on vahvasti lomittunut. Ryhmän toimintaa verrataan rugby-joukkueeseen, jossa koko ryhmä pyrkii etenemään yksikkönä ja toimimaan tiiviissä yhteistyössä. Myös menetelmän nimi () viittaa rugbyn erikoistilanneryhmitykseen. Nimi on myös sittemmin jäänyt käyttöön johtuen menetelmän yhtäläisyyksistä rugby-joukkueeseen ja sen toimintaan; molemmat ovat erilaisiin tilanteisiin sopeutuvaisia, nopeita ja itseohjautuvia. Varsinaisen scrum-viitekehyksen kehittäjinä pidetään Jeff Sutherlandia, Ken Schwaberia, John Scumniotalesia ja Jeff McKennaa. ==Viitekehyksen piirteet== ===Työskentelytapa=== Scrumissa työskennellään toistavasti ja lisäävästi () ennustettavuuden optimoimiseksi ja riskien kontrolloimiseksi. Tavoitteena oleva tuote kehittyy pikkuhiljaa täydellisemmäksi ja valmiimmaksi useiden kehitysjaksojen aikana. Kehitysjaksoa kutsutaan sprintiksi (). Sprintti on 1-4 viikon mittainen aikaraja, jonka sisällä tuotetaan “valmiin” määritelmän täyttävä, käyttökelpoinen ja potentiaalisesti julkaisukelpoinen tuoteversio. Jokaisen sprintin sisältö sovitaan sprintin suunnittelupalaverissa ennen sprintin aloitusta, ja toteutettaviksi valitaan sellaisia tuotteen kehitysjonon kohtia, joilla on sillä hetkellä suurin merkitys projektin onnistumiselle. Sprintin lopuksi järjestetään sprinttikatselmus, jossa kehitystiimi esittelee sprintin konkreettiset saavutukset (esim. ohjelmiston uusimman version) tuoteomistajalle sekä mahdollisille sidosryhmien edustajille palautteen saamiseksi ja ymmärryksen lisäämiseksi kehityksen tilasta. Ennen seuraavan sprintin aloittamista pidetään vielä sprintin retrospektiivi, jossa tarkastellaan prosessin näkökulmasta mikä sprintin aikana sujui hyvin ja mitä voitaisiin parantaa seuraavassa sprintissä. ===Scrumin roolit=== Scrum- kehityksessä käytetään yhtä tai useampaa scrumtiimiä (). Scrumtiimi koostuu tuoteomistajasta, scrummasterista ja kehitystiimistä. Scrumtiimi päättää kunkin sprintin tavoitteet ja tehtävät, ja vastaa yhdessä siitä, että asetettuihin tavoitteisiin päästään. Scrumtiimi on itseohjautuva ja monitaitoinen, ja sillä on valta päättää omista työmenetelmistään. Yksi scrumtiimin jäsen toimii tuotteen omistajana (). Tuoteomistaja vastaa tuotteen arvon ja kehitystiimin työn arvon maksimoimisesta. Käytännössä tämä tapahtuu määrittelemällä tuotteen vaatimukset sekä järjestämällä tuotteen kehitysjono yhteistyössä scrumtiimin kanssa. Tuoteomistaja on yksi henkilö, ei komitea. Tuoteomistaja voi hyödyntää komiteoita tai edustaa sellaisen toiveita tuotteen kehitysjonon kautta, mutta tuotteen kehitysjonon järjestyksen muuttamiseksi tulee aina ensin vakuuttaa tuoteomistaja. Tuoteomistaja tuntee tuotteen liiketoimintaa ja edustaa asiakkaita ja käyttäjiä. Tuoteomistajan toiminta maksimoi tuotekehitykseen sijoitetun pääoman tuottoprosentin (ROI) ja varmistaa, että scrumtiimi toteuttaa jokaisessa sprintissä sellaisia vaatimuksia, jotka ovat tuotteen onnistumisen kannalta keskeisimpiä. Tuoteomistaja hyväksyy sprinttikatselmuksessa edellisen sprintin tuoteversion ja osallistuu sprintin suunnittelupalaveriin varmistaakseen, että kehitystiimi ymmärtää sprinttiin valittavat tuotteen kehitysjonon kohdat riittävällä tarkkuudella. Tuoteomistaja myös auttaa kehitystiimiä ymmärtämään vaatimuksia ja tarvittaessa tarkentaa sprinttiin valittujen vaatimusten toteutustapaa sprintin aikana. Toinen scrumtiimin rooleista on kehitystiimi (). Kehitystiimi koostuu ammattilaisista, jotka muuttavat sprinttiin valitun tuotteen kehitysjonon sisällön potentiaalisesti julkaisukelpoiseksi “valmiiksi” tuoteversioksi jokaisessa sprintissä. Ainoastaan kehitystiimin jäsenet osallistuvat tuoteversion kehitykseen. Kehitystiimit ovat monitaitoisia sisältäen kaiken tarvittavan osaamisen potentiaalisesti julkaisukelpoisen tuoteversion kehittämiseksi. Kehitystiimin jäsenillä voi olla erityistä osaamista tai erilaisia työn painopisteitä, mutta vastuu kehityksestä kuuluu koko kehitystiimille yhdessä. Kolmas scrumtiimin rooli on scrummaster (). Scrummaster vastaa siitä, että kaikki ymmärtävät ja käyttävät Scrumia. Scrummasterit tekevät tämän varmistamalla, että scrumtiimit pitäytyvät Scrumin teoriassa, käytännöissä ja säännöissä. Scrummaster on scrumtiimin palveleva johtaja. Toisin kuin perinteisellä esimiehellä, scrummasterilla ei ole scrumtiimin jäseniin suoraa määräysvaltaa, vaan hän vaikuttaa scrumtiimiin Scrum-prosessin kautta. Scrummasterin tehtävät koostuvat suurelta osin ryhmän työskentelyä haittaavien esteiden poistamisesta ja ryhmän valmentamisesta itseohjautuvuuteen. Scrummaster vastaa siitä, että scrumtiimin päivittäinen työskentely on tuottavaa ja Scrumin pelisääntöjä noudatetaan. Hän tarkkailee työn etenemistä, ja jos sprintin tavoitteiden saavuttaminen alkaa näyttää epätodennäköiseltä, hän kommunikoi kehitystiimin ja tuoteomistajan kanssa tilanteen korjaamiseksi tai sprintin sisällön kaventamiseksi. Scrummaster myös suojaa tiimiä ulkopuoliselta hälyltä, kuten sprintin aikana pyydetyiltä uusilta vaatimuksilta, ja tekee kaikkensa turvatakseen tiimilleen työrauhan. ===Scrumin tuotokset=== Scrumin tuotokset kuvaavat työtä tai lisäarvoa tavoilla, jotka lisäävät läpinäkyvyyttä ja tilaisuuksia tarkastelulle ja sopeuttamiselle. Scrumin tuotokset on suunniteltu erityisesti maksimoimaan läpinäkyvyyden niille keskeisille tiedoille, jotka auttavat scrumtiimejä onnistuneesti toimittamaan “valmiin” tuoteversion. * Tuotteen kehitysjono () on järjestetty lista kaikesta, mitä tuotteessa saatetaan tarvita, sekä ainoa lähde tuotteeseen toteutettaville vaatimuksille ja muutoksille. Tuoteomistaja vastaa tuotteen kehitysjonosta mukaan lukien sen sisältö, saatavuus ja järjestäminen. Tuotteen kehitysjono ei ole koskaan valmis, vaan se kehittyy, kun tuote sekä ympäristö, jossa sitä tullaan käyttämään, kehittyy. Julkaisusuunnitelmaksi kutsutaan usein sellaista tuotteen kehitysjonoa, joka sisältää kaikki tuotteen kehitysjonosta seuraavaan julkaisuun valitut kohdat () sekä alustavasti suunnitellun määrän sprinttejä julkaisun toteuttamiseen. * Sprintin tehtävälista () koostuu sprintin suunnittelupalaverissa valituista tuotteen kehitysjonon kohdista sekä suunnitelmasta niiden toteuttamiseksi. Sprintin tehtävälista on kehitystiimin antama ennuste siitä, mitä toiminnallisuutta seuraavaan tuoteversioon tulee sisältymään sekä tarvittavista tehtävistä toiminnallisuuden toteuttamiseksi. Sprintin tehtävälista määrittää ja tekee näkyväksi kaiken työn, jonka kehitystiimi kokee tarpeelliseksi kehittääkseen tuotteen kehitysjonon kohdat “valmiiksi” tuoteversioksi ja saavuttaakseen sprintin tavoitteen. Edes tuoteomistaja ei voi sprintin aikana vaihtaa sprinttiin valittuja tuotteen kehitysjonon kohtia toisiin. Kehitystiimi voi kuitenkin halutessaan milloin tahansa muuttaa, lisätä tai poistaa sprintin tehtävälistan tehtäviä varmistaakseen, että sprintin tavoite ja siihen valitut tuotteen kehitysjonon kohdat toteutuvat. * Edistymiskäyrä () kuvaa tuotteen tai sprintin jäljellä olevaa työmäärää ajan funktiona. * Tuoteversio () on summa kaikista tuotteen kehitysjonon kohdista, jotka ovat valmistuneet sprintin ja aiempien sprinttien aikana. Sprintin lopussa siinä valmistuneen tuoteversion tulee olla “valmis”, joka tarkoittaa, että se täyttää scrumtiimin “valmiin” määritelmän ja on käyttökelpoisessa kunnossa, riippumatta siitä, päättääkö tuoteomistaja julkaista sen. ===Scrumin tapahtumat=== Scrumissa käytetään ennaltasovittuja tapahtumia luomaan säännöllisyyttä ja minimoimaan muiden kuin Scrum-­palavereiden tarve. Scrumin tapahtumat ovat aikarajattuja eli jokaisella niistä on maksimipituus. Tämä varmistaa sen, että suunnittelulle varataan riittävästi aikaa, mutta suunnitteluprosessissa ei pääse syntymään hukkaa. * Sprintti () on scrumin ydin, enintään kuukauden pituinen tai sitä lyhyempi aikaraja, jonka sisällä tuotetaan “valmiin” määritelmän täyttävä, käyttökelpoinen ja potentiaalisesti julkaisukelpoinen tuoteversio. Sprinteillä on sama pituus koko kehityksen ajan. Uusi sprintti alkaa välittömästi edellisen päätyttyä. * Sprintin suunnittelupalaveri () on palaveri, jossa suunnitellaan sprintin aikana tehtävä työ. Tämä suunnitelma luodaan yhteistyössä koko scrumtiimin kesken. Sprintin suunnittelupalaverin pituus rajataan enintään kahdeksaan tuntiin kuukauden mittaiselle sprintille. Lyhyemmille sprinteille varataan suhteessa vähemmän aikaa. Esimerkiksi kahden viikon sprintille varataan enintään neljä tuntia. * Päiväpalaveri () on enintään 15 minuutin mittainen aikarajattu palaveri, jossa kehitystiimi tahdistaa keskinäiset työnsä ja luo suunnitelman seuraaville 24 tunnille. Tämä tapahtuu tarkastelemalla edellisen päiväpalaverin jälkeen tehtyä työtä ja ennustamalla, mitä voidaan toteuttaa ennen seuraavaa päiväpalaveria. Päiväpalaveri pidetään yksinkertaisuuden vuoksi samaan aikaan samassa paikassa. Päiväpalaverissa jokainen kehitystiimin jäsen kertoo vuorollaan 1) Mitä olen tehnyt viime päiväpalaverin jälkeen, 2) Mitä aion tehdä ennen seuraavaa päiväpalaveria, ja 3) Onko työni etenemisellä esteitä. Päiväpalaveri ei ole raportointia, vaan kehitystiimin oma tapaaminen, jonka tarkoitus on optimoida työpäivän arvo ja todennäköisyys sille, että kehitystiimi pääsee sprintin tavoitteeseen. Mikäli keskustelua halutaan jatkaa 15 minuutin jälkeen, on tarkoituksenmukaista sopia erillinen palaveri, vaikka välittömästi päiväpalaverin jälkeen. * Tuotteen kehitysjonon työstö (, aik. ) tarkoittaa yksityiskohtien, työmääräarvioiden ja kehitysjonon kohtien keskinäisen järjestyksen lisäämistä. Kyseessä on toistuva prosessi, jossa tuotteen omistaja ja kehitystiimi lisäävät yhteistyössä yksityiskohtia tuotteen kehitysjonoon. Työstön aikana tuotteen kehitysjonon kohtia katselmoidaan ja arvioidaan. Tuotteen omistaja voi kuitenkin milloin tahansa muulloinkin päivittää niitä. Työstöön käytetään yleensä enintään 10 prosenttia kehitystiimin kapasiteetista. Kehitystiimi vastaa kaikista työmääräarvioista. Tuotteen omistaja voi vaikuttaa kehitystiimiin auttamalla sitä ymmärtämään vaatimuksia ja tekemään kompromisseja, mutta työn tekijät antavat lopullisen työmääräarvion. * Sprinttikatselmus () on sprintin lopussa pidettävä epämuodollinen palaveri, jossa tarkastellaan kehitetty tuoteversio ja sopeutetaan tarvittaessa tuotteen kehitysjonoa. Sprinttikatselmuksen aikana scrumtiimi ja sidosryhmät selvittävät yhteistyössä, mitä sprintissä kehitettiin. Perustuen tähän tietoon ja mahdollisiin sprintin aikana tuotteen kehitysjonoon tehtyihin muutoksiin osallistujat keskustelevat siitä, mitä voitaisiin kehittää seuraavaksi. Kehitystiimin esittämän tuotedemon tavoitteena on saada palautetta, edistää keskustelua ja luoda realistinen pohja seuraavan sprintin suunnittelupalaverille. Sprinttikatselmus rajataan enintään neljään tuntiin kuukauden sprintille. Lyhyemmille sprinteille varataan suhteessa vähemmän aikaa, esimerkiksi kahden viikon sprintille enintään kaksi tuntia. * Sprintin retrospektiivi () antaa scrumtiimille tilaisuuden tarkastella työskentelyään ja tehdä suunnitelman kehitysprosessin parannuksille, jotka toteutetaan seuraavassa sprintissä. Sprintin retrospektiivi pidetään sprinttikatselmuksen jälkeen ja ennen seuraavan sprintin suunnittelupalaveria. Palaveri rajataan enintään kolmeen tuntiin kuukauden sprintille. Lyhyemmille sprinteille varataan suhteessa vähemmän aikaa. ==Scrum-ban== Scrum-banhttp://leansoftwareengineering.com/ksse/scrum- ban/ on ohjelmistotuotannon malli, joka perustuu Scrum- ja Kanban- menetelmiin. Scrum-ban soveltuu erityisesti ylläpitoprojekteihin tai (järjestelmä)projekteihin, joissa vaatimuksia tai ohjelmistovirheitä tulee jatkuvasti ja yllättäen. Tällöin Scrumin aikarajoitteisista sprinteistä ei ole mainittavaa hyötyä. Sen sijaan Scrumin päivittäisiä kokouksia ja muita käytäntöjä voidaan soveltaa tiimistä ja tarpeesta riippuen. Kanban- menetelmästä tuttua on työvaiheiden visualisointi sekä rajoitteet sille, montako käyttäjätarinaa tai korjausta voi kussakin työvaiheessa olla kesken (). Näiden avulla ohjataan kehitystiimin tekemistä niin, että käyttäjätarinan tai korjauksen läpimenoaika on mahdollisimman lyhyt ja toisaalta tiimin jäsenet ovat sopivasti työllistettyjä.http://www.crisp.se/henrik.kniberg/Kanban-vs-Scrum.pdf s.5 Työvaiheiden havainnollistamiseksi samassa tilassa olevat tiimit käyttävät yleensä post-it -lappuja ja isoa taulua.http://leansoftwareengineering.com/wp- content/uploads/2008/04/scrumban-001.jpg Hajautettujen tiimien tapauksessa työvaiheiden visualisoinnin tarjoavat ohjelmistot ovat käytännöllisiä. Mm. ScrumWorks, VersionOne, TargetProcess sekä Jira Software (ent. GreenHopper) näyttävät kehitystiimin käyttäjätarinat (Story), ohjelmistovirheet (Bug) tai tehtävät (Task) jaoteltuna eri vaiheisiin. Työvaiheet ovat yksinkertaisimmillaan: aloittamattomat, käynnissä olevat sekä tehdyt tehtävät tai käyttäjätarinat. Kehitystiimit voivat kuitenkin halutessaan lisätä vaiheita (esim. määritelty, suunniteltu, testattu, toimitettu). Ylimääräiset vaiheet voivat auttaa jos joku vaihe muodostuu pullonkaulaksi eikä keskeneräisen työn raja-arvoja haluta nostaa. Tarkempi vaihejaottelu mahdollistaa paremmin myös kehittäjien erikoistumisen tiettyihin työvaiheisiin. Keskeneräiselle työlle ei ole olemassa määriteltyjä raja- arvoja, vaan jokaisen tiimin täytyy ne määritellä itse kokeilun ja erehdyksen kautta. Liian pieni raja-arvo aiheuttaa tiimin jäsenten odottamista, koska työtä ei tule seuraavaan vaiheeseen tarpeeksi nopeasti. Toisaalta liian suuret raja-arvot keräävät suuren keskeneräisen työn varaston, mikä hidastaa läpimenoaikaa.http://www.crisp.se/henrik.kniberg/Kanban-vs-Scrum.pdf s.18 - 19 Yhtenä nyrkkisääntönä voidaan kuitenkin pitää, että kenelläkään tiimin jäsenellä ei pitäisi olla valittuna enempää kuin kaksi tehtävää kerrallaan ja toisaalta kaikilla tiimin jäsenillä ei saisi olla samanaikaisesti kahta tehtävää. Scrumin ja Kanbanin suurin ero on siinä, että Scrumissa sprintit ovat aikarajattuja, kun taas Kanbanissa työskenteleminen on jatkuvaa. Tämä näkyy työvaihetauluissa, jotka Scrumissa tyhjennetään sprintin jälkeen. Kanbanissa tehtävät taas liikkuvat jatkuvasti samalla taululla. Scrum painottaa monitaitoisia tiimejä, jotka pystyvät itsenäisesti kehittämään potentiaalisesti julkaistavan tuoteversion. Kanban taas mahdollistaa erikoistuneet, toiminnalliset tiimit.http://www.crisp.se/henrik.kniberg/Kanban-vs-Scrum.pdf s.22 - 23 Koska Scrum-ban on menetelmänä suhteellisen uusi, sen käytöstä ei ole olemassa juurikaan artikkeleita. Sen sijaan Kanbania on sovellettu ohjelmistotuotannossa ainakin Microsoftilla sekä Corbiksella.http://www.infoq.com/presentations/kanban-for-software Video sekä Summary -kenttä videon vieressä ==Katso myös== * Ketterä ohjelmistokehitys ==Lähteet== ==Aiheesta muualla== * Scrum Alliance * Scrum.org * Jeff Sutherlandin blogi * Ken Schwaberin blogi * Suomenkielinen Scrum-sanasto * Sopimuspohja Agile/Scrum-projekteihin * Agile Finland ry - Suomalainen ketteryyttä edistävä yhdistys ==Kirjallisuutta== * * * Luokka:Ohjelmistotuotanto Luokka:Seulonnan keskeiset artikkelit