Kasutajalood, mittefunktsionaalsed nõuded ja ärakasutajalood

Kasutajaloo (user story) konseptsioon on tarkvaraarenduses väga tuttav. Selle formaat ja ülesehitus üldiselt lihtsad – “<Rollina> tahan <teha seda>, et <saavutada midagi>”. Näiteks:

“Bussijuhina tahan näha nimekirja järgmise päeva liinidest, et saaksin ennast ette valmistada”.

Kasutajalood keskenduvad enamasti mingile funktsionaalsusele, seega toote omanikule (product owner)/tellijale/lõppkasutajale lihtsalt mõistetavad, seega ka hinnatavad-võrreldatavad (prioritiseeritavad). Mittefunktsionaalsed nõuded on aga sageli märksa udusemad – “süsteem peab toetama 1000 samaaegset kasutajat”. Keda see huvitama peaks, mis on selle prioriteet?

Teatud pingutusega võib ka mittefunktsionaalsed nõuded ümber kirjutada kasutajalugudeks:

  • Suurem osa lehekülgi peab avanema alla 1 sekundi, sealhulgas kõik enamkasutatavad leheküljed. ->
    • Kasutajana tahan, et kõik enamkasutatavad leheküljed avaneks alla 1 sekundi, et minu töös ei oleks tarbetuid katkestusi süsteemi taga oodates.
  • Süsteemi peab saama kasutada Chrome, Firefox, IE kui ka Safari veebilehitsejaga ->
    • Kasutajana tahan süsteemi kasutada nii Chrome, Firefox, IE kui ka Safari veebilehitsejaga, et ma ei peaks arvutisse installeerima spetsiaalset brauserit.
  • Info allikas, selle muutmise ja hävitamise fakt peavad olema tuvastatavad ->
    • CIOna tahan, et kogu info allikas, selle muutmise ja hävitamise akt on tuvastavad, et saaksin vajadusel esitada neid tõendina kohtusse.

Ja nii edasi. See aitab tellijat ühe või teise nõude tähtsuse hindamisel ja ideaalses scrumi-maailmas backlog’i (ametlik tõlge “tegemate tööde nimekiri” on selgelt pikk. Päkkloog? Varn (nagu homse varn)? Tööde kuhi?) järjestamisel ning tööde tellimisel.

Päris kasutajalood need aga siiski ei ole, sest noh, 1 sekundi reegel peab jääma kehtima igavesest ajast igavesti ja seega on üsna keeruline võtta kätte ja see ära realiseerida. Realiseeritav tundub olevat pigem mingisugune koormustesti/monitoorimise lugu. Näiteks:

“Projektijuhina tahan, et iga tarne järgselt jookseks automaatselt koormustest, mis tuvastab 1 sekundi reeglile vastavust, et ennetada jõudlusprobleeme.”

Omaette ooper on arenduse käigus selguvate vigade, probleemide või täiendustega, mis ei tulene otseselt nõuetest. Näiteks leitakse mingi turvaauk; vajadus muuta arhitektuuri (reafaktoreerida); kasutajaliidese ebakõla; lihtsalt kole kood. Ükski neist ei pruugi tunduda kliendile/lõppkasutajale eriti tähtis – kõik ju toimib muidu ka. Arendaja mõttes on need aga tõsised asjad, millel hiljem võivad olla tõsised tagajärjed.

Üks viis neid teadvustada ja prioriteeti tõsta on ärakasutajalood (abuser story). Põhimõtteliselt on tegu negatiivsete kasutajalugudega, millel on ROI(1) (return on investment) asemel ROI(2) (risk of inactivity). Tavaliselt räägitakse neist turvalisuse juures ja tüüpiline näide:

“Kurja häkkerina tahan varastada krediitkaartide andmeid, et saaksin kalleid asju osta”.

Ärakasutaja võib aga olla ka laisk kasutaja, agar klikkija, lihtsalt hästi palju kasutajaid, ajahädas arendaja, halb liidestatud süsteem ja nii edasi. Näiteks:

“Laisa kasutajana ma ei viitsi otsida ja sisestada aadressi juurde postiindeksit ja jätan selle täitmata, et säästa ennast post.ee lehele minekust ja selle asemel midagi meeldivamat teha.”

“Ajahädas arendajana ma ei kontrolli enne koodi push’imist, kas minu koodimuudatus lõhub olemasolevat funktsionaalsust, et jõuda rohkem uusi funktsionaalsusi lisada”.

“Halva liidestatud süsteemina ma jätkan sobimatu vastuse puhul süsteemi pommitamist päringutega, et siiski oma vastus saada”.

Need lood on võib-olla juba arusaadavamad – esimesel juhul on risk on postindeksi puudumine või vale indeksi sisestamine. Võib-olla peaks olema teenus, mis ise indeksi leiab? Teisel juhul on risk toodangus ilmnevad regressioonid ja lahenduseks automaattestid (ja võib-olla commit hook vms). Kolmandal juhul on risk koormus süsteemile. Nüüd säilib lootus, et tellija/toote omanik suudab ka selliseid vigu ja täiendusi paremini koos teiste kasutajalugudega tähtsuse järjekorda sättida.

Ärakasutajalugu ei ole tegelikult päris kasutajalugu. Tal on küll sarnane formaat, ja kui kasutajalool on vastuvõtukriteeriumid (acceptance criteria), siis ärakasutajalool on kummutamiskriteeriumid (refutation criteria) ehk mingid tingimused, mille puhul võime öelda, et vastav ärakasutaja tegevus ei ole võimalik. Kuid ärakasutajalugu ei kirjelda kuidagi tegevust. Ideaalis oleks ärakasutajalugu eepos (epic), mille all oleks konkreetsed kasutajalood:

“Tavakasutajana tahan, et süsteem leiaks ise postiindeksi vastavalt aadressile, et ma ei saaks teha vigu ega peaks seda mujalt taga otsima”

“Projektijuhina/kasutajatoe juhina tahan, et peamised kasutusstsenaariumid oleksid kaetud automaattestidega, et ma ei peaks tegelema live-keskkonna regressioonidega.”

Ärakasutajalugu on üks võte, mis aitab pöörata tähelepanu riskidele, mis ühe või teise asja tegemata jätmisega kaasneda võivad ning leida seal seest tegelikke kasutajalugusid.


Hinnates tundmatut

Eluline probleem tänapäeva Eesti tarkvaraarenduses: “Meil on vaja lisada süsteemile BDOC tugi nii lugemiseks kui ka loomisel. Kaua selleks läheb?”. “Eee… misasi see BDOC on? Kaks päeva? Kaks nädalat? Kaks kuud?”. Ehk siis vahel (või siis üsna tihti) tuleb ette olukordi, kus meile visatakse ette mingi uus tehnoloogia, tundmatu probleem või lihtsalt üks hiiglasuur tükk (“Vajalik aruandemoodul” – heal juhul järgneb sellele 20 lehekülge mingisugusel tasemel nõudeid või kirjeldust). Sellisele asjale on väga lihtne anda kiire ja täpne hinnang, mis ei pea absoluutselt vett (vt ka “Mis on Peipsi järve ruumala?” jms @Targo tarkvara ). Kui aga sõber klient või kallis projektijuht tahab pisut reaalsemaid vastuseid, siis tuleb enne hinnangu andmist pisut eeltööd teha.

Kui meile visatakse ette meile tundmatu küsimus või probleem, siis sõltuvalt detailsuse tasemest on meil neli eeltöö varianti:

  • Eelanalüüs
  • Uuring (research)
  • Väljalöök (spike)
  • Trasseer (tracer, tracer bullet)

Eelanalüüs

Kui probleemi kirjeldus on väga hägus, nii et ei ole täpselt aru saada, milles üldse probleem on ja mida tegelikult vaja on, siis lendab peale analüütik ja teeb eelanalüüsi. Eelanalüüsi mõte on jõuda probleemi tuumani ja kirjeldada lahendus vähemalt kasutajaloo/kasutusloo/sooviloo (User Story, need on näited eestikeelsetest vastetest) tasemel, samuti tuvastada olulised tehnilised kitsendused-vajadused (riistvara, liidesed jms).

Uuring

Kui probleem on enam-vähem selge, aga tehniliste lahendusviiside kohta pole jätkuvalt kellelgi aimu, siis tuleb ilmselt asja pisut uurida. Tüüpiline uuring tähendab otsingumootorite, foorumite ja isikliku kontaktvõrgustiku kammimist – kas kellelgi on olnud sarnane probleem ja mida nad selle lahendamiseks teinud on? Tüüpilised näited on mingite uute komponentide lisamine – otsinguserver, tekstituvastus, arhiivimoodul, andmalaod ja äriintelligents. Uuringu järgselt peaksime teadma, milliste vahenditega me probleemi lahendame.

Väljalöök (spike)

Ma olen väga solvunud, et niivõrd olulisele agiilse arenduse terminile ei ole eestikeelset vastet! Seega kasutan elektrotehnilist terminit. Igatahes – kui meil on teada probleem ning enam-vähem ka lahendusviis või -vahend, siis see ei tähenda veel, et me oskaksime lahenduse sobivust tegelikult ka hinnata. Väljalöök on põhimõtteliselt tehniline prototüüp (proof of concept – jälle, mis on vaste?). See on see koht, kus kirjutatakse koodi – mis küll hiljem ära visatakse. Põhimõtteliselt proovitakse järgi, kas valitud lahendus sobib probleemi lahendamiseks – torgitakse keerulisemaid liideseid; tehakse algelised koormustestid vms. Väljalöök ütleb – jah, pakutud lahendus teeb seda, mis meil vaja on. Nagu kasututajaliidese prototüüp, on ka väljalöögi kood mõeldud äraviskamiseks (praktikas – keeruline). Väljalöögi näide on põhimõtteliselt debugimine vea olemuse teadasaamiseks või käsitsi tehtud andmebaasipäringud.

Trasseer (tracer bullet, teine link)

Vt eelmise lõigu esimest lauset. Seekord kasutame sõjandusterminit. Trasseer on mingi kitsa osa toodangukvaliteedile vastavalt realiseerimine. Trasseeri järel teame, mille pihta me laseme ja kaugel me märgist oleme. Ehk näeme ära, milliseid teisi komponente muudatus puudutab ja kui suured need muudatused tegelikult on. Pärast trasseeri peaks olema disain selge, tehnilised ülesanded fikseeritud ja põhimõtteliselt jääb ainult koodi kirjutamise vaev. Trasseeri saab kasutada ka toodangus – näide kuulsusrikka analüüsimooduli puhul võiks olla üks enamkasutatav raport.

Nagu eelnevast jutust järeldada võib, suudame algsele hägusale probleemile viisakaid hinnanguid anda alles pärast trasseeri. Arendajad võivad nüüd lugemise pooleli jätta ja järgmisel korral BDOC-küsimusele rahulikult vastata “Ma ei oska praegu vastata, aga kui ma seda ühe päeva uurin, siis juba oskan”.

Nendel, kes allkirju jahivad või oma sajalisi luhvitama peavad, tekivad kindlasti küsimused “Kes selle kõik kinni maksab?” ja “Millal ikkagi valmis saab?”.

Teine küsimus on lihtsam. Tavaliselt eraldatakse sellistele eeltöödele kindel aeg, ajakarbistamine või ajalahterdamine (timeboxing) on asja nimi. Ehk siis antakse ette mingi piiratud aeg, mis ülesandele kulutada. Planeerimise (ja näiteks scrumi) mõttes on tegu täiesti tavalise ülesandega – kuluvat aega on kogemusele tuginedes täiesti võimalik hinnata, ülesande realiseerimist saab planeerida ja lõpus hinnata, kas on tehtud või mitte. Pärast seda suudame järgmisele etapile anda juba märksa täpsema hinnangu. Scrumis võib selliseid uurimisi planeerida sprintidesse või lihtsalt eraldada sprindi lõpus mingi aja, et järgmise sprindi ülesandeid täpsustada. Reaalsete projektide puhul (ideaal-maailmas) peaks kõik selle läbi tegema enne kliendile tähtaegade või mahuhinnangute andmist. Aga vaata ka järgmine lõik.

Kogu see eelanalüüs-uurimine-väljalöök-trasseer võib kulutada märkimisväärselt aega (=raha) ja samas on nagu väga vähe reaalseid tulemusi. Ainult trasseer on päriselt ka kasutatav, aga see võib olla ka ainult murdosa kogu lahendusest. Rahanumbrite vaates tegeleb arendaja tundide-päevade kaupa lihtsalt mingi voodooga – öelgu kohe oma hinnang ära, veel parem – tehku lahendus ka kohe ära, kui keeruline see ikka olla saab??? Ideaalmaailmas käivad aga raha ja mõistus käsikäes ja kõik need kirjeldatud tegevused suurendavad tõenäosust, et klient saab ka selle, mida tegelikult vaja on. Kogu tarkvara-arenduse teooria korrutab “mida varem viga avastatakse, seda odavam on parandamine”. Kaks päeva midagi lihtsalt uurida on tundub päris pikk aeg, aga kui alternatiiv on kaks nädalat arendada ja siis avastada, et “nii ikka ei saa”, siis võib-olla ikka tasub uurida (Einsteini arvamus). Uurimisele kulutatud aeg ei ole kunagi mõttetu, see on rubriigist “töötame targemini, mitte rohkem”. Iseasi on selleks reaalselt ka aja leidmine ja eraldamine, kuna

  1. tavaliselt on tähtaegadega jube kiire
  2. klient maksab töötava tarkvara eest

Tark klient tellib ja maksab muidugi ka uurimise eest, sest ta saab aru, et lõppkokkuvõttes maksab ta siis vähem. Mitte-nii-targa kliendi puhul peab kallis projektijuht mingeid muid kavalusi välja mõtlema, näiteks arveldama järgmise kuu arenduste uurimised eelmise kuu realisatsiooni sisse või midagi muud taolist. Fikseeritud hinna, tähtaja ja skoobiga projektide puhul (näiteks riigihanked) on lugu keerulisem ja üleüldse tuleks sellistest projektidest karjudes kaugemale joosta, aga ka siin on lõppkokkuvõttes odavam kulutada aega uurimisele, kui hiljem ägada ebareaalsete ajahinnangute ikkes.

Head uurimist!

Inspiratsioon:
Chris Sterling – Managing Software Debt: Building for Inevitable Change (Agile Software Development Series)

Research, Spikes, Tracer Bullets, Oh My!

 


Agiilne treening

See idee pärineb ühelt kolleegilt, kes seostas muusika ja tarkvaraarenduse – protsess on agiilne ja iteraktiivne ning pärast arendust minnakse live’i (mõnikord minnakse kohe live’i – eriti kõvadel meestel tuleb asi ka siis hästi välja, aga see kuulub rubriiki “ärge seda kodus järgi tehke”). Ma nüüd väänan sellele ideele veel ühe vindi juurde ja räägin hoopis agiilsest treeningust.

Soojenduseks sõnaseletusi tarkvaravõhikutele:

  •  agiilsus (agility) – eestikeelne vaste oleks väledus või kohanemisvõime. Tarkvara-arenduses töökorraldus, kus kliendilt saadakse pidevat tagasisidet tarkvara kvaliteedi ja prioriteetide kohta. Algsest plaanist kinnipidamine ei ole oluline, tähtis on anda kliendile kiiresti töötav tarkvara ning seda hiljem vajadusel täiendada ja muuta.
  • iteratiivsus – maakeeles kordamine. Tarkvara-arenduse kontekstis tähendab, et erinevad protsessi osad (analüüs-arendus-testimine-live) käiakse läbi korduvalt, lühikeste perioodide kaupa ja iga kord võetakse ette ainult mingi väiksem osa tarkvarast. 

See oli siis meelevaldne lühikokkuvõtte, huvilised võivad vaadata agiilse tarkvaraarenduse manifesti või Wikipediat.

Agiilsust saab aga suurepäraselt rakendada ka spordis ja kui päris aus olla, siis seda ka tehakse, aga ei nimetata just päris nii. Milline oleks siis agiilne sport? Kohandame Agile Manifesto ideid ja saame:

Sporti tehes ning teisi spordi tegemise juures aidates oleme leidnud selleks tööks paremaid viise.
Oleme hakanud hindama:

  • reaalset tulemust rohkem, kui kõikehõlmavat treeningplaani
  • inimesi ja nendevahelist suhtlust rohkem, kui protsesse ja -vahendeid
  • koostööd treeneri, ametnike ja sportlase vahel rohkem, kui reegleid ja käske
  • reageerimist muutunud oludele rohkem, kui algse plaani järgimist

Ka parempoolsetel teguritel on väärtus, kuid me hindame vasakpoolseid tegureid kõrgemalt.

Mida see kõik ikkagi tähendab? 

Kõigepealt peab olema mingi visioon tulemusest, milleni me tahame jõuda, mida me tahame saavutada, miks me sporti teeme (vastavalt – millist probleemi meie tarkvara lahendab).
Seejärel on mingisugune plaan, kuidas selleni jõuda – arvestades olukorda, millest alustamine. Ei pea olema eriti detailne (see on üldanalüüs).
Siis võetakse üldplaanist mingid osad, mis on kõige tähtsamad, millega tegelemine aitaks meid kõige rohkem edasi ja viiakse need ellu (vastavalt – ühe komponendi/funktsionaalsuse detailanalüüs ja realisatsioon).
Järgneb testimine spordis, mis ongi testmine ja live oleks siis võistlus. Treeningvõistlus on pre-live:)
Testimine annab sisendi hindamisele: kas me jõudsime eesmärgile lähemale? Kas meie eesmärk on üldse õige? Kas üldplaan kehtib? Mis on järgmine üldplaani osa?
Ning kõik algab otsast peale. Sealjuures on olulised inimestevahelised suhted – avatud ja sõbralik suhtumine, kuna eesmärk on ühine (tulemus/töötav ja kasulik tarkvara). Autoriteedi asemel kehtivad kokkulepped. Plaanid on olemas, aga neid võib muuta.

See võib kõlada üsna kaootiliselt ja paradoksaalselt ongi kaose vältimiseks ka agiilsel arendusel üsna kindlad raamid ja protsessid:) Näiteks on mingid fikseeritud ajavahemikud, mille jooksul plaane/kokkuleppeid ei muudeta ja kindlad ajad, millal kõik need üle vaadatakse. Samuti on raudkindel reegel teiste inimeste ja nende arvamuse austamine. Aga üldiselt panebki iga meeskond (mitte võistkonna tähenduses, vaid siis ametnikud-treenerid-sportlased/kliendid-analüütikud-arendajad-testijad kompott) paika omad reeglid ja seejärel austab neid – seni, kuni need uuesti üle vaadatakse.

Ja ideaalis liigume me samm-sammult muudki parema tuleviku poole! Alati kui ma kirjutama hakkan, jõuan ma tagasi ühe põhimõtte juurde – tee mis tahad, peaasi et hea saab:)


Agiilne arutelu agiilse arenduse teemadel

Nagu eelnevalt mainitud, olen mina üks vähekogenenud Scrum Master, aga proovin saada paremaks ja käisin TechEd Europe 2012 raames kahel üritusel –  AAP309 juba kirjutasin, aga lisaks ka BOF07, An Agile Talk on Agile, Peter Provost ja Klaus Even Enevoldsen. Et selle kohta slaide/salvestust pole, panen peast;)

Formaat oli iseenesest geniaalne. Põhimõtteliselt toimus arutelu nagu Scrum:

  • tekitati teemade (küsimuste) backlog
  • hinnati prioriteedid. Igal inimesel oli kaks häält.
  • võeti küsimused sprindis (10 min) ette
  • Sprindi lõpus:
    • Hääletati, kas küsimus on vastatud. Kui vastatud, siis oli tehtud, kui ei, läks tagasi backlogi
    • Lisati uusi teemasi backlogi ja hääletati prioriteedid ümber

Teemad oli ka muidugi huvitavad:

  • Kuidas kaasata tiimi liikmeid (eriti neid, kes vastu punnivad)? Selgitada, õpetada ja harida, kui see ei aita, siis võib-olla polegi vastavat liiget vaja? St üks tõrvatilk rikub poti mee ja korralikult toimiv tiim kaalub üles ühe (või paar superstaari). Jah, alguses on ilmselt raske, aga pikas perspektiivis on sellest rohkem kasu.
  • Mis on agiilse tarkvaraarenduse tulevik? Sama, mis kogu tarkvaraarendusel – continuous delivery ehk pidev tarne. Järjepidev koostöö ja tagasiside, arenduse ja nö hoolduse piiride hägustumine.
  • Kui palju on vaja ette analüüsida? Nii palju, kui on vaja? St kasutuslugudele, mis kunagi töösse võib-olla ei jõuagi, pole väga mõtet aega kulutada, samas peab arendustiimidel olema alati tööd võtta, samuti nõuab täpsemate hinnangute andmine mingil tasemel analüüsi. Ehk siis mida kõrgemal mingi lugu backlogis on, seda detailsem analüüs peab olema tehtud. Kui ülesanne liigub sprinti, peab olema arendajale vajalikul tasemel analüüs tehtud.

Kõrvamärkus: vahel juhtub, et tehakse mingi asjaga tööd, aga sprindi lõpus otsustakse, et ikka ei ole valmis ning prioriteetide ümbervaatamisel selgub, et võib-olla me ikka ei taha seda. Ja see on täiesti normaalne.

Edasi sai aeg kahjuks otsa, aga sellegipoolest oli väga äge ja formaat, nagu öeldud, geniaalne. Hiljem küsisin veel Peterilt eraldi, et kas ja kuidas on võimalik teha agiilset arendus fikseeritud aja, raha ja nõuete korral. Vastus:

  • sisemiselt saab Scrumi teha, kuigi kliendivaates pole sellel väga mõtet (sest kõik tuleb kindlaks ajaks ära teha)
  • hinnangute andmisel anna hinnanguid ja korruta need 3. Või 5. Või 7. Kui sa aga tõepoolest projekti tahad, siis suured ninad keelduvad asju läbi korrutamast, mis ei muuda aga töö suurust. Seega reeglina võidab sellised pakkumised see, kes pakub ebareaalset hinda/tähtaega. Kui sina võidad, siis tõenäoliselt saad rahaliselt vastu pükse.
  • üldiselt – need on halb variant, aga teinekord võib kliendi sissesöömiseks neid kasutada.

Agiilsed ajahinnangud

Juhtumisi olen mina meie tiimi Scrum Master (võrdlemisi vähekogenud) ning ühtlasi aegajalt puutun kokku ajahinnangute muu sellisega. Seega sai käidud kahel Scrumi/agiilse arenduse loengul/arutelul, soojenduseks võtame esimese ehk AAP309, Making Agile Estimation Work,  Stephen Forte ja Joel Semeniuk.

  • Ajahinnangud
    • Aegade algusest on tarkvaraarenduses olnud ajahinnangud probleemsed – tavaliselt valed, liiga optimistilikud.
    • Ajahinnang on hinnang (=ebatäpne, vastavalt hetke parimatele teadmistele, mis on ), mitte lubadus.
    • Anna ulatus, mitte üks number.
    • Ära anna hinnangut õhust, küsi täpsustavaid küsimusi – hinnang läheb täpsemaks.
    • Määramatuskoonus – alguses on sinu hinnang ebatäpne ~4x (nii üles kui alla, st hinnanguliselt 1 aastane projekt võib võtta 3 kuud-4 aastat), aga läheb järjest täpsemaks. Ajahinnang on täpne siis, kui projekt on lõpetatud.
    • Tuleb endale tunnistada (ja teistele selgeks teha), et ajahinnangud on subjektiivsed ja muutuvad.
    • Algne hinnang ongi ebatäpne ja peab muutuma (tuleb ümber hinnata), kuid läheb täpsemaks vastavalt sellele, kui hästi me probleeme tunneme.
  • User stories ja story points
    • Väärtus kasutajale. As a <role> I would like to <action> in order to <the goal or business value>. Peaksid sisaldama ka vastuvõtukriteeriume – millal on valmis. Ei tohiks olla liiga pikk (üks lõik). Hiljem lüüakse väiksemateks (arendus)ülesanneteks. Liiga väiksed tükid hinnangu andmisel suurendavad ebatäpsust.
    • Inimestel on raske hinnata mingi asja suurust, aga lihtne võrrelda. Seega on meil baaslugu, millel on kindel arv punkte. Kõik tulevased kasutuslood hinnatakse võrdluses sellega – 2x suurem, 2x väiksem, sama jne. Eelis võrreldes tundidega on nt see, et erinevate inimeste hinnangud võivad sisaldada erinevaid asju – puhas arendus vs arendus koos testimise, projektijuhtimise, paigalduste, koolituste jms. Võrdlus on kõigil aga sama. Alles kunagi hiljem tõlgitakse punktid ümber tundideks.
    • Punktide andmine – planning poker, siis ei mõjuta teiste hinnangud. Tuleb leida konsensus, ühine arusaamine. Kui hinnangud on väga erinevad, saadakse asjadest erinevalt aru ja tuleb see läbi arutada.
  • Backlog
    • Backlogis võib olla maksimaalselt 3 (või midagi taolist) kõrge prioriteediga tööd, 5 keskmist ja ülejäänud madalat
    • Prioriteet ja hinnangud on seotud, seega võiks eelnevalt hinnata ja siis prioritiseerida
    • Iga sprindi lõpus uued kasutuslood, bugid, hinnangud ja prioriteedid, seega muutub ka backlog ja seega järgmise sprindi sisu!
  • Velocity
    • Palju story pointe suudab tiim sprindi läbida. Muutuv suurus, aga samuti muutub täpsemalt sprintide käigus.
    • See on see koht, kus story points tõlgitakse ümber tundideks!
  • Re-estimate
    • Mõõdame tulemusi ja muudame vastavalt sellele hinnanguid.
    • Siin selgub, kas me oleme graafikus projekti lõpetamise mõttes. Lõpetamiseks minev aeg=(Backlog (punktides)/sprindi velocity (punktides))xsprindi pikkus. Alguses on hinnang jätkuvalt ebatäpne! Arvestada ka parandusteks kuluvat aega.
    • Kui ei ole graafikus, tuleb midagi muuta (traditsiooniline aeg/kvaliteet/funktsionaalsus kolmnurk)

TL,DR – agiilne arendus tähendabki pidevat muutumist: muutub backlog, hinnangud, ajakava, kasutuslood. Hinnangud ongi defintsiooni järgi alguses ~4x valed, aga lähevad projekti edenedes paremaks, mida paremini me tunneme ülesandeid, tiimi jms.

Lugemisvara:

  • User Stories Applied – Mike Cohn
  • Agile Estimating and Planning – Mike Cohn
  • Agile Retrospectives –  Esther Derby, Diana Larsen
  • slideshare🙂 – Stephen Forte, Joel Semeniuk

Muidu – väga huvitav ja mõnus huumor, mitmeid “ma tean, mida te tunnete”-hetki. Nii tore, et ma pole ainus.