torstai 22. lokakuuta 2015

Ketterästi kuin gaselli

Ketterät ohjelmistokehitysmenetelmät ovat nykyään ohjelmistosuunnittelun valtavirtaa (Agile software development). Yksi sellaisiksi laskettavista tekniikoista on Scrum. Sille on tyypillistä tuotekehitysprosessin tiukka vaiheistus, jolla pyritään parantamaan tuotekehityksen ennustettavuutta ja hallitsemaan siihen liittyviä riskejä.

Scrumin keskeisiä käsitteitä ovat:

  • Sprintti (Sprint): Yleensä 1 - 4 viikon mittainen pätkä, jonka aikana on tarkoitus tuottaa tietyn toiminnallisuuden sisältävä, osittain valmis ohjelmisto.
  • Tehtävälista (Sprint Backlog): Lista tehtävistä, jotka on tarkoitus toteuttaa.
  • Edistymiskäyrä (Burndown Chart): Kaavio, joka kuvaa tehtävien toteutumista.
  • Suunnittelupalaveri (Sprint Planning Meeting): Sprintin alussa pidettävä kokous, jossa valitaan sprinttiin sisältyvät tehtävät.
  • Scrum-palaveri ts. päiväpalaveri (Daily Scrum): Päivittäinen kokous, jossa kukin tuotekehitystiimin jäsen kertoo:
    1. Mitä on tehnyt edellisen päiväpalaverin jälkeen
    2. Mitä aikoo tehdä ennen seuraavaa päiväpalaveria
    3. Onko työn etenemiselle tiedossa esteitä
  • Katselmus (Sprint Review): Sprintin lopussa pidettävä palaveri, jossa keskustellaan siitä, mitä sprintin aikana saatiin aikaan.
  • Retrospektiivi: (Sprint Retrospective): Palaveri, jossa prosessitasolla tarkastellaan sprintin toteutumista. Mikä meni hyvin, ja mitkä asiat voitaisiin seuraavassa sprintissä toteuttaa paremmin?

Jotta homma säilyisi ketteränä, on lukuisille palavereille määritelty sprintin pituuteen suhteutettu maksimiaikansa. Varsin tavallisen kahden viikon sprintin kohdalla tämä tarkoittaa, että suunnittelupalaverille varataan aikaa neljä tuntia (4h), scrum-palavereille 15 - 30 minuuttia, katselmukselle kaksi tuntia (2h) ja retrospektiville 1,5 tuntia.

Mutta hetkinen... Tässä blogissahan kohkataan enimmäksen juoksemiseen, hiihtämiseen ja retkeilyyn liittyvistä jutuista. Miten Agile ja Scrum liittyvät asiaan?

No, aasinsilta on ainakin helppo rakentaa. Ohjelmistokehityksen tavoin myös edellä mainitut harrasteet sisältävät usein puurtamista samankaltaisina toistuvien tehtävien parissa.

Voisikohan Agile tuoda lisäarvoa myös fyysisiin harjoitteisiin? Kukapa ei haluaisi juosta ketterästi kuin gaselli! Ja olisihan se kätevää, jos lenkille lähtiessään pystyisi tarkasti arvioimaan paluuaikansa, vaikkapa saunan ajastusta varten. Arvelen myös, että Scrumiin sisältyvä retrospektiivinen osuus saattaisi hyvinkin kehittää juoksijan nopeutta.

Asiaa selvästikin täytyy testata, aluksi ainakin ajatustasolla. Koska Scrum on ryhmätyöskentelyyn tarkoitettu menetelmä, otan kuvitteelliseen juoksutiimiin mukaan vaimoni. Tiimillä täytyy olla nimi, jonka valintaan käytetään yleensä kohtuuttomasti aikaa, ja lopulta päädytään johonkin outoon vaihtoehtoon. Mielikuvituksettomasti valitsen tiimimme nimeksi Askelmittari.

Sprintin pituutta täytyy hieman miettiä, koska juoksulenkillä yksi sprintti ei voi olla kahden viikon mittainen. Juoksemme yleensä tunnin lenkkejä, joten ajatus 12 minuutin sprinteistä saattaisi toimia. Tunti on helppo jakaa viiteen osaan, ja Cooperin testikin on sattumoisin juuri saman pituinen.

Myös muut Scrumiin liittyvät jutut täytyy suhteuttaa normaalia lyhyempään sprinttiin. Päätämme pitää scrum-palaverit kahden minuutin välein, jolloin niitä mahtuu yhteen sprinttiin kuusi kappaletta. Palaverien ja katselmusten pituutta lyhennetään vastaavasti:

  • Sprintin suunnittelupalaveri: 30 sekuntia
  • Scrum-palaverit: 15 sekuntia
  • Sprintin jälkeinen katselmus: 30 sekuntia
  • Retrospektiivi: 15 sekuntia

Ja sitten vaan liikkeelle! Tavoitteena on juosta kymmenen kilometrin lenkki ja käyttää siihen aikaa enintään tunti.


Ensimmäinen sprintti

Suunnittelupalaverissa sovimme, että juoksemme sprintin aikana Vaivasenlammelle asti. Matkaa on vain reilut 1,5 km, joten tavoite lienee helppo saavuttaa. Ensimmäisestä sprintistä ei kannata tehdä liian haastavaa.

Otan mukaani A7-kokoisen lehtiön, joka toimii tehtävälistana. Kirjaan ensimmäisen sprintin tehtäväksi "Juokse Vaivasenlammelle", jonka jaan edelleen alitehtäviin "Juokse Monarille", "Juokse Leirikyläntielle" ja "Juokse lammelle". Tuntuu hyvältä, kun homma tulee kerrankin suunniteltua kunnolla!

00:02:00 Olemme päässeet Kermatien risteykseen ja pysähdymme ensimmäiseen scrum-palaveriin. Matka on lähtenyt hyvin liikkeelle, mutta nyt edessä on tien ylitys, johon liittyvistä riskeistä keskustelemme palaverissa.

00:04:00 Scrum-palaveri Luolatien risteyksessä. Pian Kermatien jälkeen alkoi alamäki, jota oli kevyt juosta. Tällaiset pikku pysähdykset ovat oikeastaan aika mukavia!

00:06:00 Pysähdymme scrum-palaveriin Korpitien kohdalla. Alamäki jatkuu edelleen, mutta seuraavaan printin alkuun mennessä sen pitäisi olla jo taputeltu.

00:08:00 Saavumme Leirikyläntielle. Scrum-palaverissa huomioimme, että reittimme kääntyy nyt asfaltilta kohti Vaivasenlampea menevälle hiekkapolulle, jonka kaupunki on ystävällisesti kunnostanut ulkoilijoita varten.

00:10:00 Pidämme scrum-palaveria ehkä puolen minuutin matkan päässä Vaivasenlammesta, minkä jälkeen hölkkäämme lammen rantaan. Lammen yli puhaltava tuuli tuntuu hieman viileältä.

00:12:00 Sprintti päättyy, pidämme katselmusta. Tyytyväisinä toteamme saavuttaneemme Vaivasenlammen. Sprintin aikana olisi ehtinyt pidemmällekin, mutta katsoimme parhaaksi odottaa seuraavaa sprinttiä.

Katselmusta seuraavassa retrospektiivisessä palaverissa mietimme, että Monarin jälkeisessä alamäessä olisi päässyt kovempaakin. Pohdimme myös, että juostessa voisi olla käyttöä scrum-kellolle, joka piippaisi aina, kun on palaverin aika.


Toinen sprintti

Ennen matkan jatkumista pidämme suunnittelupalaverin. Pitäisikö toisen sprintin aikana tavoitella vain Kiviniemeä, vai olisiko parempi pyristellä Rauhalahteen asti? Vatvomme asiaa vähän liikaakin. Lopulta päivitän tehtävälistan: "Juokse Ruokolahden rantaan", "Juokse Kiviniemeen", "Juokse Rauhalahteen".

00:02:00 Saavumme Ruokolahden pohjukkaan, pidämme scrum-palaverin. Vaivasenlammella hartioihin tarttunut kylmyys vaivaa vieläkin hieman.

00:04:00 Ruokolahden jälkeen alkoi ylämäki, joka viimein sai lämmöt nousemaan. Nyt ei kannattaisi pysähtyä, koska kylmä iskee helposti uudestaan, mutta scrum-palaveri täytyy kuitenkin pitää.

00:06:00 Pidämme scrum-palaveria Kiviniemen sillalla. Ehdimmeköhän tämän sprintin aikana Rauhalahteen asti?

00:08:00 Rauhalahden latupohjalla jo. Juoksu tuntuu hyvältä, mutta scrum-palaveri katkaisee etenemisen juuri, kun meno alkoi maistua. Edessä on ylämäki.

00:10:00 Sprintin viimeinen scrum-palaveri pidetään lentopallokentän luona. Ylämäkeen piti vähän kiristää tahtia.

00:12:00 Sprintti päättyy. Ehdimme suunnitelman mukaisesti Rauhalahteen, mutta hiukan tiukille se otti.

Retrospektiivisessä osuudessa vaimo huomauttaa, että ylämäessä mentiin turhan kovaa. Pakkohan se oli rypistää, kun matkalla tuli seisoskeltua.


Kolmas sprintti

Kolmannen sprintin suunnittelupalaverissa päätämme yrittää Leväsentielle asti. Matka on hiukan pidempi kuin toisella sprintillä, mutta maasto tasaisempaa. Ehkä se onnistuu.

00:02:00 Sprintti alkaa huonosti. Luen tehtävälistaa juostessani ja kaadun, kun jalkani tökkää maasta törröttävään juurakkoon. Housut menevät polvesta rikki. Emme ehdi kuin Katiskaniementielle, jossa pidämme ensimmäisen scrum-palaverin.

00:04:00 Tennishallin kohdalla. Olemme jäljessä aikataulusta. Pelkään, että Burndown Chart kääntyy tällä menolla nousuun.

00:06:00 Hauenkoukun risteys. Nyt pitäisi juosta, mutta pysähdymme silti pitämään scrum-palaveria. Mahtaisikohan se riittää, jos sprintin aikana pitäisi vain yhden palaverin?

00:08:00 Jälleen scrum-palaveri. Tällä kertaa Särkilahden sillalla, jossa tuulee kylmästi. Lähtiessämme liikkeelle lenkkarini kengännauha aukeaa, mutta nyt ei ole aikaa solmia sitä.

00:10:00 Yritämme juosta kovaa, mutta ehdimme hädin tuskin Särkilahden laiturin kohdalle, kun on scrum-palaverin aika. Varsinaista asiaa ei ole.

00:12:00 Sprintti päättyy. Emme saavuttaneet Leväsentietä, emmekä tällä menolla ehdi viiden sprintin aikana kotiinkaan.

En haluaisi pitää retrospektiivistä palaveria, koska taivas on alkanut tummua. Onkohan sade tulossa? Arvaan myös, että vaimo valittaa taas liian kovasta juoksuvauhdista. On rasittavaa kuulla samat jutut kerta toisensa jälkeen.


Neljäs sprintti

Sprintin suunnittelupalaveri hermostuttaa minua. Ehkä siksi, että nyt pitäisi vaan pyrkiä eteenpäin, eikä vatuloida reittisuunnitelmien kanssa. Väittelemme silti reittivaihtoehdoista yli minuutin. Lopulta päätämme tavoitella Leväsen Shellin kohdalla olevaa risteystä.

00:02:00 Nousemme viimein Leväsentielle. Pidämme scrum-palaveria samalla, kun taivaalta alkaa tihkua vettä. Hukkaan juoksurytmini tauon aikana.

00:04:00 Scrum-palaveri kauppakeskus Hermanin risteyksessä. Sade tuntuu yltyvän. Kun matka jatkuu, astun edelleen avoimena olevan kengännauhani päälle, ja menen taas nurin. Miksi en sitonut nauhaa edellisen sprintin aikana? Tätä se kiire teettää.

00:06:00 Olemme K-Raudan kupeessa ja pysähdymme scrum-palaveriin. Hittoako näitä täytyy joka sähkötolpan kohdalla pitää? Luovun tehtävälistasta.

00:08:00 Saan Kartanonkadun risteyksessä kimppuuni koiran, joka tarraa kiinni housunlahkeeseeni. Yritän hätistellä koiran tiehensä siinä kuitenkaan onnistumatta. Tilanne laukeaa vasta, kun koira huomaa ohi ajavan pyöräilijän, ja säntää ulvoen tämän perään. Käsittelemme tapahtunutta scrum-palaverissa.

00:10:00 Pidämme scrum-palaverin Vaasan leipomon kohdalla. Vettä sataa kaatamalla. Tuntuu tyhmältä seisoa sateessa.

00:12:00 Sprintti päättyy. Katselmuksessa toteamme tavoitteen jääneen taas saavuttamatta. Emme ehtineet kuin Biltemalle asti.

Retrospektiivisessä palaverissa puimme vielä viivästymisen syitä. Vaimo pitää minua pääsyyllisenä, koska tappelin koiran kanssa. Mistä olisin voinut tietää, että se piski ilmestyy reitillemme?

Palaverin aikana meitä lähestyy toinen juoksuporukka, joka on huomannut touhuilumme. Kun kerromme olevamme scrum-juoksijoita, he innostuvat asiasta ja haluavat juosta kanssamme. No kai se käy, ehkä matka etenee isolla porukalla joutuisammin. Kuopio Agile Scrunners, jeah!


Viides sprintti

Suunnittelupalaverissa teemme selväksi, että kyseessä on juoksulenkkimme viimeinen sprintti, ja sen aikana vaimon ja minun olisi tarkoitus ehtiä kotiin. Nyt siis täytyy laittaa jalkaa toisen eteen!

00:02:00 Saavutamme Leväsen Shellin, jonka edustalla pidämme scrum-palaverin. Uudella tiimillä on paljon asioita. Yksi jäsenistä ehdottaa, että kokeilisimme paljasjalkajuoksua. Toinen on sitä mieltä, että kylmä ilma selätetään parhaiten juoksemalla shortseissa, koska se karaisee. Kolmas valittaa jalassaan olevasta rakosta. Palaveri kestää ja kestää.

00:04:00 Scrum-palaveri Leväsenlammen luona. Vaimo on selvästikin väsynyt ja alkaa vinoilla: "Mitäs olet edellisen palaverin jälkeen tehnyt ja mitä meinaat seuraavaksi tehdä? Onko esteitä?" Yksi tiimimme jäsenistä valittaa jalassaan olevasta rakosta.

00:06:00 Juostuamme lammen rantaa pari minuuttia pidämme jälleen scrum-palaverin mittaisen tauon. Jalassa oleva rakko mainitaan taas.

00:08:00 Ylitämme Leväsenlammesta laskevan pienen puron ja hiljennämme vauhtia scrum-palaveria varten. Vaimo ja minä vilkaisemme toisiamme silmiin, mutta kumpikaan ei sano mitään. Muuten palaverissa käy kauhea pulina.

00:10:00 Lähestymme Leväsenlammen laituria. On sprintin viimeisen scrum-palaverin aika, mutta vaimo ei enää pysähdy. Minäkin jatkan matkaani.

00:12:00 Sprintti päättyy. Matkaa on vielä jäljellä useita satoja metrejä.

Sekä katselmus että retrospektiivinen palaveri jäävät pitämättä. Emme enää aloita uutta sprinttiä, vaan juoksemme yhtä soittoa kotiin. Aurinko kurkistaa pilven raosta.

5 kommenttia:

  1. Odotan mielenkiinnolla jatkoa! Kehitysprojekti on saatu päätökseen ja on tuotantoon siirtymisen aika. Miten siinä käy? Toivottavasti myös ehdit korjata kehitysympäristön ennen seuraavaa projektia, ettei tarvitse taas juosta polvesta rikki olevissa housuissa.

    VastaaPoista
    Vastaukset
    1. Oikeastaan olen vähän huolissani, koska tulokseton juoksuprojektini on kestänyt jo 25 vuotta, eikä loppua vieläkään näy. Lisäksi tuntuu siltä, että projektin eteneminen on viime vuosina vain hidastunut, mikä ei edes johtune housuista. Pelkään, ettei tuotteesta koskaan tule valmista.

      Poista
    2. Eihän sen tarvitse valmistua. Keskeneräisen voi aina työntää putkesta ulos ja bugit voi korjata sitten seuraavassa versiossa ;)

      Poista
  2. Pakko nauraa kun tätä luki :-). Mihinhän muuhun scrumia voisi soveltaa? Pyykkien viikkaus, kaupassa käynti?

    VastaaPoista
    Vastaukset
    1. Arvelisin, että vain taivas on rajana... Varsinkin ajatus scrum-kauppareissusta on mainio! Mikä nostaisikaan tunnelmaa enemmän kuin scrum-palaveri Prisman kassalla ruuhka-aikaan? :)

      Poista