VEDOS 7.9.2009
Petrus Repo
Kuje Research Group
Tietojenkäsittelytieteen laitos
Helsingin yliopisto
Kesän 2009 ohjelmistotuotantoprojekteissa kokeiltiin ketterää kehitystä sovelletulla Scrum-variantilla. Oppilailta ei edellytetty esitietoa kyseistä mallista, vaan ohjaaja auttoi opiskelijat alkuun. Niksit tulivat tutuiksi kurssin aikana, ja ohjaajan vastuulla oli valvoa, että ryhmä toimii prosessin mukaisesti.
Tämän dokumentin tarkoituksena on kuvailla kesällä 2009 sovellettu prosessi siten, että se olisi toistettavissa myöhemmillä ohtuprojektin kursseilla. Prosessimalli pohjautuu Scrum-malliin, mutta erinäisten mukautusten johdosta mallia ei pidä kutsua Scrumiksi. Prosessimallin "työnimi" on Ohtuketterä.
Ohjaaja ottaa yhteyttä ryhmänsä jäseniin 2-3 viikkoa ennen kurssin alkamista ja alustaa esim. Doodle-kyselyn ensimmäistä ryhmätapaamista varten. Ensimmäinen noin kaksi tuntia kestävä ryhmätapaaminen kannattaa sijoittaa kurssin ensimmäisen viikon maanantaille tai tiistaille. Ensimmäisen ryhmätapaamisen sisällöstä on jäljempänä.
Opiskelijoille kannattaa välittää linkki esimerkiksi tähän prosessikuvaukseen jo ennen ensimmäistä tapaamista. Myös jokin lyhyt Scrum-johdanto voi tarjota näppärää taustatietoa, esimerkiksi "Scrum in 10 Minutes"-video. Ohtuketterää prosessimallia ei kuitenkaan pidä kutsua Scrumiksi.
Muistilista kurssin alkuun liittyvistä tehtävistä:Kurssi kestää 16 kalenteriviikkoa, joista vähintään 14 on käytettävä työskentelyyn prosessia noudattaen. Kahden viikon pyrähdyksinä kurssille mahtuu siten yhteensä kuusi pyrähdystä (sprinttiä). Kurssi alkaa niin kutsutulla alkupyrähdyksellä (sprint 0), jonka tarkoituksena on saada lentävä lähtö ensimmäisen varsinaisen pyrähdyksen suunnitteluun. Sekä alkupyrähdyksen että ensimmäisen varsinaisen pyrähdyksen pituudet ovat kaksi viikkoa. Ryhmä saa itse päättää pyrähdyksensä pituuden toisesta pyrähdyksestä alkaen.
Jokaisen pyrähdyksen jälkeen on ohjaajien ja prosessisihteereiden yhteinen ohjaajapalveri. Tästä hieman lisää jäljempänä.
Esimerkki aikataulusta:
vko 1 - vko 2: | Alkupyrähdys | Tutustuminen ja ensimmäisen pyrähdyksen suunnittelu |
vko 3 - vko 4: | Pyrähdys 1 | |
vko 5 - vko 6: | Pyrähdys 2 | |
vko 7 | Pyrähdys 3 | Tenttiviikko |
vko 8 | Loma | Väliviikko |
vko 9 - vko 10: | Pyrähdys 4 | |
vko 11 - vko 12: | Pyrähdys 5 | |
vko 13 - vko 14: | Pyrähdys 6 | |
vko 15 - vko 16: | Pyrähdys 7 |
Viikkopalaveri on lyhyehkö, nopea ja tehokas tilannekatsauspalaveri.
Followupissa käydään läpi:
Ensimmäisen viikon follow-up korvautuu aloituspalaverilla. Toisesta viikosta alkaen jokaisella viikolla pidetään n. 1h-1,5h ryhmätapaaminen, jossa käsitellään juoksevat asiat ja hoidetaan projektiryhmän sosiaalinen puoli.
Alkupyrähdyksen ja ensimmäisen pyrähdyksen aikana ryhmällä on kaksi säännöllistä viikkotapaamista ohjaajan kanssa. Toisen pyrähdyksen aikana ohjaaja ei osallistu enää toiseen viikkopalaveriin, jolloin ryhmältä vaaditaan vain yksi säännöllinen viikkotapaaminen, jossa ohjaaja on läsnä. Ryhmällä on kuitenkin syytä olla koko projektin ajan myös toinen viikkopalaveri, joka toimii ryhmän sisäisenä motivaattorina ilman ohjaajan läsnäolon mahdollisesti tuomaa auktoriteettipainetta.
Päivittäinen sykli ei vaadi fyysistä läsnäoloa. Tavoitteena on välittää ryhmäläisille tieto siitä, miten ja milloin pyrähdyksen backlogin tehtävät etenevät. Tai että ne eivät etene. Ryhmä saa järjestää asian niin kuin itse parhaaksi kokee (sähköpostilista, google docs, wiki,....), mutta päivittäinen raportointi täytyy saada jollain tavalla mukaan ryhmätyöhön.
Ryhmän täytyy ylläpitää burndown-käppyrää pyrähdyksen etenemisestä. Projektin todellista etenemisnopeutta kuvaaavan burndown-käppyrän ylläpitäminen ilman päivittäinen sykliä ei ole mahdollista. Palaverin (live tai virtuaalinen) tavoitteena on kunkin jäsenen sosiaalinen lupaus siitä, milloin hänen vastuullaansa olevat asiat etenevät.
HUOM: On erittäin ok arvioida, ettei tee jonain päivänä yhtään mitään! Tärkeää on asiasta kertominen etukäteen.
Jokaisen pyrähdyksen lopussa ryhmä käy asiakkaan kanssa läpi pyrähdyksen aikana tehdyn työn näyttämällä pyrähdyksen aikana toteutettua ohjelmistoa. Asiakasdemossa korostuu, että jokaisen pyrähdyksen lopputuloksena pitää olla "toimiva" tuote - oli sen hetkinen implementaatio kuinka pieni tahansa (esim. pelkkä käyttöliittymäprototyyppi).
Demon jälkeen asiakkaalta pyydetään palaute ja tavoitteet seuraavalle pyrähdykselle. Tavoitteet määritellään demolähtöisesti, eli ryhmän täytyy tässä yhteydessä sopia asiakkaan kanssa, mitä seuraavan pyrähdyksen demossa esitetään. Tämän pohjalta muodostetaan kuvaukset käyttötapauksista ("user stories") ja suunnitellaan niihin liittyvät tehtävät (ks. pyrähdyksen suunnittelu).
Ryhmän on oltava heti projektin alussa yhteydessä asiakkaaseen ja sovittava review-tapaamiset pitkälle etukäteen! Pyrähdyksen pituus on määritetty etukäteen, joten kaikki sprint-reviewin päivämäärät voidaan sopia etukäteen jo ensimmäisellä projektiviikolla.
Seuraavan pyrähdyksen suunnittelupalaveri pidetään mahdollisimman pian Sprint Reviewin jälkeen. Asiakas ei saa osallistua suunnittelupalaveriin. Tapaamisen voi pitää joko heti reviewin jälkeen tai esimerkiksi seuraavana päivänä. Ryhmä suunnittelee (ilman asiakasta) alkavan pyrähdyksen tehtävät ja käsittelee asiakkaalta saadun palautteen.
Ideaalitilanteessa suunnittleupalaverissa valitaan seuraavan pyrähdyksen tehtävät projektin backlogista eikä varsinaisesti mietitä uusia tehtäviä. Projektin backlogia täytyy päivittää koko ajan.
Jokaiselle pyrähdyksen tehtävälistaan tulevalle tehtävälle arvioidaan työmäärä. Työmääräarviot eivät varsinkaan projektin aluksi korreloi tehtäviin käytetyn todellisen työtuntimäärän kanssa, koska ryhmä ei vielä tiedä todellista kehitysnopeuttansa. Arviot kuitenkin tarkentuvat projektin aikana. Työmäärän yksikkönä voi olla kätevää käyttää esimerkiksi kuvitteellista "Zörgön" (zg) -yksikköä, joka kuvaa neljän tunnin eli yhden ohtu-työpäivän keskeyttämätöntä työaikaa.
Työmääräarvion ja todellisen työtuntimäärän suhde on Scrum-noviiseille hankala asia. Ohjaajan täytyy varsinkin kurssin alkupuolella kiinnittää erityistä huomiota siihen, että ryhmäläiset eivät piirrä burndownia todellisten työtuntien vaan työmääräarvioiden mukaan.
Suunnittelupalaverin lopputuloksena on seuraavan pyrähdyksen backlog.
Jokaisen syklin jälkeen ohjaajat ja prosessisihteerit tapaavat toisensa. Palaverissa käydään "manageritasolla" läpi tilanne kussakin ryhmässä ja pyritään projektien seurannan lisäksi tuomaan esiin erityisesti ryhmissä keksityt hyvät ideat (positiivinen vertaistieto).
Palaverin sihteeri (kurssin vastuuhenkilö) kirjoittaa muistiinpanot. Puhtaaksikirjoitetut muistiinpanot välitetään kurssin opiskelijoile, jotta vertaistieto leviäisi mahdollisimman laajalle.
Jokaisen kokouksen tavoitekesto sekä esityslista täytyy määritellä etukäteen. Poikkeus voidaan tehdä hyvästä syystä esim. pyrähdyksen suunnittelupalaverissa: jos kaikilla osanottajilla on aikaa, palaveria voi jatkaa kunnes kokouksen tavoitteet on saavutettu. Ryhmän täytyy kuitenkin päättää menettelytavasta etukäteen.
Jokaisella yli 15 minuuttia kestävällä kokouksella on oltava puheenjohtaja ja esityslista. Puheenjohtajuus voi olla kiertävä tai pysyä samana kaikissa kokouksissa. Puheenjohtajan ei kokousteknisistä syistä kannata toimia kokouksen sihteerinä.
Puheenjohtajan tehtävänä on:
Palaverin sujuvuus edellyttää etukäteen jaettua esityslistaa. Esityslistan ei tarvitse olla monimutkainen tai pitkä, mutta tavoitteena on oltava esityslistan noudattaminen.
Jokaisella kokouksella on oltava sihteeri, joka kirjoittaa kokousmuistiinpanot kokouksen edellyttämässä laajuudessa. Esimerkiksi päivittäisen daily scrum -palaverin muistiinpanoina toimii backlogiin päivitetty työmääräarvion eteneminen.
Huom: Erityisesti asiakastapaamisten muistiinpanot on laadittava huolellisesti! Kärjistetysti sanoen kaikki, mitä asiakas sanoo, on dokumentoitava.
Kullekin palaverityypille (daily-palaveri, followup, sprint review, sprint planning) varten kannattaa laatia esityslistapohja, jotta palavereissa toistuvat asiat eivät unohdu käsittelystä. Pohjaan kannattaa ottaa kussakin kokoustyypissä toistuvat asiat, esim. lyhyt tarkistus tuntiseurantaan, lyhyt katsaus burndowniin tms.
Huom: Esimerkiksi daily-palaverin esityslista voi olla kaikissa kokouksissa täysin identtinen, mutta se on silti laadittava vähintään kerran.
Ohtuprojektin kurssisivulla on periteiden painama raskaan dokumentoinnin listaus. Tällä kurssilla ei ole tarkoitus dokumentoida raskaasti. Kurssin dokumentaaiovaatimukset ovat seuraavat:
Sprinttien aikana tuotettu oheisdokumentaatio (burndownit, projektin backlog, sprinttien backlog jne) tulee jättää logiksi jatkoprojektille. Niitä ei tarvitse kirjoittaa erityisesti "puhtaaksi" tai erilliseksi dokumentiksi, mutta ne on liitettävä osaksi palautusta (esim. exporttaamalla Google Docsista), koska ne kompensoivat perinteisiä dokumentointivaatimuksia.
Kesän 2009 kurssilta ilmaan jäänyt kysymys: kuinka ketterässä ohtuprojektissa pitäisi dokumentoida vaatimukset? Vaatimusten dokumentoiminen reverse engineering -tyyppisesti jälkikäteen ei ole mielekästä, kuten ei myöskään vaatimusten dokumentoiminen "etukäteen", jolloin muutosten päivittäminen tuottaa harmia. Olisiko ratkaisu riittävän kattavassa automatisoidussa testijoukossa (test suite)?
AUTOMATISOITU TESTAUS Vaatimuksesti aluasta alkaen (dokumentaation kompensointi) Backlogin tehtäviin huomioitava sisäänrakennetusti testaus Testauksesta: - ajettava test-suite - yksikkötestauksen harjoittelua - "huonokin testi on parempi kuin ei testiä" - php: integraatiotestaus, selenium - palm: miten? c-unit? - junit Linkki: the way of testivus
Kaikki pyrähdykseen liittyvät vaatimukset on ehdottavasti saatava asiakkaalta pyrähdyksen katselmointitilaisuudessa (sprint review), jotta ryhmä pystyy huomioimaan ne pyrähdyksen suunnittelutilaisuudessa (sprint planning).
HUOM! Ero projektin tehtävälistaan (product backlog) ja suhde pikkutehtävälistaan (action points).
Esimerkki:
"Kaikki kolmossprintin backlogin tehtävät ovat korkeintaan
2 työpäivän (2 zg, 8h, whatever) kokoisia, mieluiten 0,5 - 1 työpäivää.
Ideaalimaailmassa keskiarvoksi tulisi:
(sprintin päivät) x tekijät,
eli jokaiselle päivälle n. 1 tehtävä, joka pitäisi tehdä, jotta pysytään
burndownin tavoiteviivalla."
Jokaisen sprintin päätteeksi sprintin katselmointitilaisuuden jälkeen pidetään retrospektiivi. Tilaisuudessa käydään päättyneen sprintin kokemukset läpi. Tavoitteena on, että jokainen ryhmän jäsen vuorollaan kertoo menneestä sprintistä:
Lista tehtävistä asioista, jotka ovat pyrähdyksen ulkopuolella (erityisesti pieniä tai yllättäviä). Listan kanssa pikkutehtävät pysyvät edes jotenkin hallinnassa. (rivitykset saattaa mennä vituiks, sori) Lista voidaan käydä läpi aina kun nähdään.
Erään ohjaajan kommentti: "Ihan mielettömän enterprisey kun voi huutaa paltsussa 'AP sulle tosta!' tai "mä otan AAPEEN tosta!"
Lista voidaan taulukoida esimerkiksi seuraavasti: aihe, kenelle delegoitu, deadline, status.
Peke: "Projektipäällikkö/johtajuus on melko perinteinen ongelma ohtuprojekteissa. Viime keväällä kokeiltiin mallia, jossa ei ollut mitään ennalta määrättyä johtajuutta. Siitä ei tullut mielestäni erityisen hyviä kokemuksia (ohjaajien puheiden perusteella), eli nyt kokeillaan tällaista kevyen johtajuuden mallia joka ei kuitenkaan ole yhtä auktorisoitunut kuin perinteinen projektipäällikkömalli."
Ongelma ehkä ratkesi kun oli nimetty prosessin sihteeri?
Kurssilla on kaksi yhteistä demoa: välidemo ja loppudemo. Välidemon ideana on luoda kaikille ryhmille yhteinen väli-deadline, joka kannustaa saamaan jotain aikaiseksi jo ennen kurssin viimeisiä hetkiä. Toinen yhteinen demo on joko projektin toiseksi viimeisellä tai viimeisellä viikolla.
Yhteisten demojen kohderyhmänä ovat ensisijaisesti kaikki ohtuprojektikurssin opiskelijat. Demotilaisuus kestää yhteensä korkeintaan kaksi tuntia, ja kaikkien kurssin opiskelijoiden tulee osallistua siihen. Yhteinen demotilaisuus ei saa kilpailla asiakkaan ajankäytöstä pyrähdyksen demon kanssa, eli asiakas osallistuu yhteisen demon sijasta ryhmän sisäiseen pyrähdysdemoon.
Riskit kannattaa käydä läpi pyrähdyksen asiakasdemossa, koska silloin myös asiakas tietää mahdollisista ongelmista. Asiakas saattaa jopa kysyä, "voidaanko tiputtaa jotain ominaisuuksia pois", koska hän saa myös tiedon mahdollista ongelmista. Riskienhallinta on pidettävä mukana tehtävien suunnittelussa, jotta riskejä ylläpidetään jokaisen pyrähdyksen aikana.
Geneerinen riskilista ei auta, pitää löytää projektikohtaiset riskit. Riskien listaaminen ja ennakoiminen auttaa välttämään riskejä. Riskienhallinan suola on proaktiivisuus, riskienhallinan ei tarvitse ainoastaan olla reagoiva. Asiakkaan ei tarvitse ymmärtää teknisiä riskejä, mutta asiakas tulee lähemmäs kehitystyön ongelmia, kun hän ymmärtää riskin tuomat ongelmat.
Seuraavia pulmia voi tulla vastaan projektin aikana
- osittain yhteinen ongelmakenttä: -- kaikki suorittaa kurssia, ei rahapalkkaa -- motivaatio-ongelmat -- osaamisongelmat -- yhteisen työtilan puute - auttaako ryhmän sisäiset demot aikataulussa pysymiseen - miten muut ryhmät ovat suunnitelleet - auttaako, että ryhmä tietää, miten muut arvioi, suunnittelee ja hoitaa daily scurminsa ja muut rutiinit ---> erityisesti vinkkejä siitä, miten muut ryhmät ovat järjestäytyneet. Tiimi ei oletusarvoisesti ole ollut ennen töissä. -- ohjaajien ja prosessisihteereiden palaveri == järjestelmällinen tapa välittää tietoa ryhmien välillä Projektiväsymys? - kesän lomaviikko vasta puolivälin jälkeen Oireita: - myöhässä saapuminen paltsuun - asioiden unohtuminen - asioiden ennakoimaton viivästyminen 3) Laitoksen maililista bugasi ryhmäläisillä ajoittain siten, että vasta esim. päivän jälkeen tuli ilmoitus, ettei viestiä pystytty lähettämään. Ryhmä käytti kommunikointiin nimenomaan postilistaa, jolloin on aika ikävää kun oma viesti ei mene perille eikä saa virheilmoitusta ajoissa. asiakastapaaminen: "Asioita ei koskaan voi sopia tarpeeksi tarkasti asiakkaan kanssa, aina on implisiittisiä vaatimuksia ja yllätyksiä. Toki tiimiltä odotetaan "kokemuksen tuomaa oikeiden vaatimusten selvitystaitoa", mutta lopulta katsotaan, mitä lukee asiakastapaamisen pöytäkirja/logissa, josta toivottavasti löytyy KAIKKI asiakkaan kanssa yksityiskohtaisesti, ohimennen ja implisiittesti sovitut asiat."