Scrum a virtuální týmy

Máte ve Vaší firmě týmy v různých lokalitách? A dokonce v různých časových pásmech? Nebo využíváte pro práci často externisty? Dá se tedy Scrum který je přímo postavený na psychologii týmové spolupráce a kooperace, intenzivní komunikaci a sdílení informací použít v takto distribuovaném prostředí? Ano, ale přinese to s sebou spoustu obtíží, které byste nemuseli řešit v případě týmu pracujícím v jedné kanceláři.

Podle povahy distribuovanosti týmů či jednotlivců je třeba zvolit vhodnou strategii. Máte-li na každém geografickém místě alespoň minimální počet lidí, ze kterých můžete udělat separátní tým, určitě ho udělejte. Overhead spojený s organizováním více týmů které nejsou na stejném místě se tak minimalizuje. Obzvláště budou-li současně týmy v jiném časovém pásmu. Jednotlivé týmy potom žijí relativně samostatný Sprint cyklus a počet dotazů na členy jiných týmů se minimalizuje na rozumné množství. Tým si obvykle poradí sám. Jediná synchronizace, která je třeba je v rámci pre-planning meetingů, prezentací výsledků Sprintu a Customer Dema. Ty můžete dělat buď osobně, nejsou-li týmy moc daleko od sebe, nebo po telefonu. Použití nějakého systému pro online meetingy (WebEx) a webkamery komunikaci výrazně usnadní. Vedete-li takový vzdálený tým, naplánujte si pravidelné meetingy, kde prodiskutujete status, případné problémy a udržíte aktivní komunikaci. Je-li toho k diskuzi méně, meeting nemusí trvat déle než pár minut.

Není-li možné týmy separovat podle geografické lokality a projekt vyžaduje intenzivní spolupráci takto distribuovaných skupinek, nezbývá než velmi striktně nastavit formální komunikaci. Organizace pre-planning meetingu a vyhodnocení Sprintu bude samozřejmě stejná jako v předchozím případě. Navíc musíte podobným způsobem zorganizovat planning meeting. Použití WebExu a webkamery je v tom případě v podstatě nutné. To ale není vše. Online musíte udělat i každodenní Scrum meetingy. Udržet takový Scrum meeting efektivní je řádově horší než když se lidé vzájemně vidí. Ale jde to. Dalším střípkem do mozaiky bude online konference celého týmu v nějakém messenger systému (Skype). Tímto kanálem se v podstatě simuluje běžná konverzace, kdy se chcete kolegy zeptat na radu. Takové Osmotická komunikace ve stylu Web2.0. Funguje to celé velice dobře, ale asi by se taková organizace špatně stavěla z lidí, co si nikdy nezkusili pravou týmovou práci. Tedy jinými slovy dobrý a zkušený tým může takto pracovat efektivně i s malým časovým překryvem (Evropa/USA). Jednotlivce, co nejsou týmovými hráči, budete těžko v takovém prostředí učit co to je tým a jak se v něm chovat.

Posledním případem jsou externisti, pracující většinu času z domova. Obecně si myslím, že z takových externistů tým nepostavíte. Nabírala bych je na samostatnou práci, kde není potřeba časté synchronizace. Chcete-li z nějakého důvodu navenek vypadat jako že je to tým pracující podle Scrum metod (burndown na výstupu), asi je možné každému externistovi připravit plán, a na konci Sprintu kontrolovat jak na tom každý z externistů je. Z toho si složíte Burndown, a jste kompatibilní se zbytkem organizace, pracující týmově, plně podle Scrum metod. To ale používáte jen skořápku navenek, jen jednu metriku. Scrum je o spolupráci v týmu, ne o práci jednotlivců. Teoreticky by bylo možné použít principy z předchozího odstavce, ale nějak si to v praxi neumím moc představit. Asi by to přineslo příliš overheadu pro projekt managera, a nemyslím, že by to přineslo nějaký pozitivní efekt, co se produktivity týče.

Samozřejmě, možné jsou všechny kombinace výše zmíněných postupů. Mám osobní zkušenosti z organizací prvních dvou případů, a nestojí to příliš energie navíc. Obecně je dobré mít na každém geografickém místě jednu kontaktní osobu, zodpovědnou za hladkou komunikaci. Je poměrně těžké honit po telefonu člověka na druhé straně zeměkoule. Jednou ještě nedorazil, pak je na kafi, příště na meetingu. Online messenger systémy pomůžou statusem, ale možnost kontaktovat někoho na druhé straně je často k nezaplacení.

Scrum jako interní proces

Určitě jste se setkali s jistou nedůvěrou zákazníků ke Scrum procesu. Takže co s tím? Otevřete-li si knihu Art of War od vojevůdce Sun Tsu, jedna z nabízených strategií je “When you are going to attack nearby, make it look as if you are going to go a long way; when you are going to attack far away, make it look as if you are going just a short distance.” Tedy jinými slovy, proč vše zákazníkovi říkat explicitně a tím ho vyděsit? Honosné názvy, za kterými zákazník neví, co si představit moc nepomůžou, navíc při představě, že se bude pravidelně muset účastnit plánování spolu s týmem v něm nutně musí vzbudit podezření, že na něj chcete hodit Vaší práci. A demo? No ukažte mu produkt, až bude hotový, a neotravujte s nedodělky. Nemá přeci čas se Vám pravidelně věnovat tolik času. I to se Vám může stát. Takže co v takových případech dělat? Zkuste pozvolna a po malých krůčkách zákazníka naučit, v čem je Scrum pro něj výhodný. Ukažte mu, že jednotlivé kroky pro něj mají smyls. Komunikujte a naslouchejte. A hlavně, zákazník přeci nutně vědět, že to, co zcela neformálně děláte, se jmenuje Scrum.

Prvním bodem bude účast na pre-planningu. Jestli-že nejste schopni zákazníka dostat na váš pre-planning přímo, vždy máte možnost se s ním před meetingem zkontaktovat a to buď osobně, a nebo klidně i po telefonu. Dejte mu na výběr, co by on nejvíce ocenil, co by rád viděl nejdříve. Jeho přání pak následně můžete hájit na pre-planningu vy. Ušetříte tak zdánlivě jeho čas. Následně, po ukončení sprintu, zákazníkovi ukažte, co se udělalo. Zajeďte za ním, a vyžádejte si jeho zpětnou vazbu. Nedělejte příliš formální customer dema. Ty můžete udělat pro týmy navzájem, ale pro zákazníka udělejte soukromou prezentaci. Až si na vaše návštěvy zvykne, můžete ho postupně začít zapojovat. V dnešní době velice pěkně poslouží i různé internetem přenášené prezentace (WebEx), takže zákazník vlastně ani nemusí nikam cestovat a neztrácí čas.

Scrum má primární cíl pro Vás. Má Vám pomáhat jak být efektivní, jak zorganizovat tým, jak motivovat lidi. Jak úspěšně dokončit projekt. Nedílnou součástí je samozřejmě i zapojení zákazníka. Ale cest, kterými to docílíte, je mnoho. A nemusí být zdaleka přímočaré. Psychologie je nejmocnějším nástrojem.

Jak nejlépe sledovat aktuální stav úloh

V minulém příspěvku jsem doporučovala Excel pro vizualizaci výsledků Sprintu a zobrazení Burndown grafu, jako jednoduchou, levnou a efektivní metodu. Podobně se můžeme postavit k trackování statusu jednotlivých úloh, plánování na sprinty a sledování úloh v backlogu. Systémy navržené na Scrum proces Vám samozřejmě dají všechny informace o aktuálním stavu, plánu, atd. nicméně často je to velmi komplexní řešení, jehož filozofii musíte přizpůsobit svůj Scrum proces, alespoň do jisté míry. Každý produkt má své pro a proti, těžko vybrat ideální.

Mantis - úvodní stránka

Jedním z možných řešení, které je zdarma, a je poněkud lepší než uchovávat backlog úloh a jejich status v Microsoft Excelu, je Mantis (bug tracking system). Originálně je to systém na trackování chyb, ale poměrně jednoduše jde použít na sledování statusu jednotlivých úloh, přiřazení úloh konkrétním lidem, plán. Mantis umožňuje posílat automatické notifikace emailem, nastavit různá práva, automaticky zobrazuje historii změn. Vzhledem k velmi dobrému filtrování si každý může přednastavit takové zobrazení, které vyhovuje jeho roli (vlastní úlohy, naplánované úlohy, backlog pro danou story, …).

Mantis - detail úlohy

Co je třeba udělat navíc. Pomocí Custom Fields si velice jednoduše přidáte nové položky – pro Scrum proces to bude Points (Body). V ideálním případě, bude-li se Vám chtít, jde pod seznam úloh přidat součet bodů, to už je ale nutné naprogramovat přímo ve zdrojovém kódu. Nic složitého. Nicméně i bez toho je funkcionalita dostatečná. Pro každý projekt dáte do seznamu kategorií (Categories) Sprinty. Mantis neobsahuje ve své originální podobě datum, tedy délku Sprintu si určujete sami. Asi by nebyl problém to doprogramovat, ale nám to vlastně nikdy moc nechybělo. Stavy jednotlivých úloh je zase ve zdrojáku velice snadno možné přejmenovat, aby více odpovídaly vašim zvyklostem. A můžete začít. Naplníte backlog úlohami, tým naplánuje Sprint, přiřadí úlohy jednotlivým lidem, a pak už jen každý den sledujete co se děje.

Mantis - celkový přehled úloh

Bohužel, verze Mantisu se hodně liší, takže výše popisované změny ve zdrojovém kódu nejsou jednoduše popsatelné tak, aby se daly rovnou použít. My máme skoro na každý projekt jinou verzi Mantisu a změny děláme projektu vždy znovu na míru. A není to nijak zvlášť časově náročná aktivita.

Co se týče spojení s Burndown grafem, každý konec sprintu se udělá rychlá synchronizace. Přepíšeme, kolik bodů se z které úlohy dokončilo, které úlohy vznikly, a graf je hotový. Je to jistá část manuální práce, ale zabere pár minut. Komplexní Scrum systém to udělá za vás, ale zase třeba nebude tak jednoduchý a obecný.

Burndown graf template

Jak na Burndown? Možností je několik. Můžete začít provozovat jeden z mnoha systémů na Scrum proces a Burndown graf se vám bude zobrazovat víceméně sám od sebe, v jedné z mnoha podob. Systémy jsou komplexní, většinou placené a ne vždy plně odpovídají Scrum procesu tak, jak by se vám hodil. Flexibilita je relativně nízká, obvykle se musíte přizpůsobit vy. Za ty nejznámější vybírám ScrumWorks, ScrumDesk, Rally, Version One. Detailně se jim budu věnovat příště.

Druhou možností je, že si napíšete vlastní Burndown v Microsoft Excelu.

Já osobně tuto možnost preferuji. Za prvé, je to transparentní, přesně víte, co zobrazujete a jak, máte to pod kontrolou. Přikládám pro inspiraci svůj XLS Burndown template. Nic složitého. První sheet obsahuje kopii produkt backlogu s vyhodnocením bodů přes jednotlivé sprinty. Druhý sheet obsahuje výpočty pro grafy. Každý sprint se do něj přenesou dvě hodnoty z sheetu Backlog – Points Remaining a Velocity (Actual Points Complete). Zbytek se počítá sám. Na začátek projektu ještě musíte naplánovat rychlost týmu a buffer do kolonek – Planned Velocity a Planned New Points (Buffer). Další dvě záložky už zobrazují grafy: Project Velocity Plan a Burndown.

Kurzy o Agile a Scrum v Čechách?

Po přednášce na WebExpu – Agilní metody a Scrum jsem zaznamenala pár dotazů, jestli bych mohla doporučit nějaké kurzy Agile a Scrum v Čechách. Já osobně nemám s kurzy zkušenosti, nicméně zkusím tu iniciovat diskuzi na toto téma. Třeba si poradíte navzájem. Jediný kurz o Agile a Scrum co se mi podařilo najít, pořádá EDU Centrum společnosti Cleverlancerum. Co se týče certifikací, v Čechách nic. Obecně nejsem zastáncem všech možných certifikátů, takže mi to vlastně ani nechybí. Zkušenost z praxe je často cennější než stovky certifikátů.

Ostatně málo informací o Agile a Scrum v češtině bylo i důvodem k založení tohoto Blogu. No, a kdybyste měli pocit, že je to málo, tady najdete pár odkazů, kde se možná dozvíte více. Obecně doporučuji knihy či přednášky zakladatele Agile Alliance and Scrum Alliance jménem Ken Schwaber, tady múžete shlédnout jeho přednášku.

No a kdybyste chteli poradit v konkrétní situaci, neváhejte a ozvěte se, domluvíme se na přednášku či konzultaci. A na závěr, v poslední době mi vyšly o Agile a Scrum dva články (ICT Revue a Business World), které Vám tímto doporučuji.

Update 2011:
Doporučené kurzy a workshopy zaměřené na Agilní metody, Scrum proces a Kanban:
sochova.cz – kurzy, školení, konzultace, koučing, audit procesů
Gopas – pravidelné veřejné kurzy zaměřené na agilní metody a Scrum proces

Burndown graf

Burndown graf je výborným pomocníkem při vizualizaci výsledků. Na internetu najdete spoustu odkazů jak takový burndown může vypadat, spousta aplikací pro Scrum proces vám je budou přímo generovat. Nicméně obyčejný Microsoft Excel vám udělá stejně dobrou a možná i lepší službu. Výhodou je že se data zpracujete a zobrazíte sami, tedy máte výstup plně pod kontrolou. V tom úplně nejjednodušším případě kdy máte backlog definovaný v Excelu spolu s výsledky jednotlivých Sprintů (třeba takto) je již vcelku snadné data zobrazit.

Důležité jsou v podstatě dva grafy. Jedním je tzv. Velocity plan, tedy plán jak rychle bude tým postupovat. Obvykle vezmete v úvahu, že na začátku se tým učí a pak už pracuje konstantní rychlostí. Je dobré zahrnout do plánu i masivní dovolené (např. Vánoce) a plán tomu pro daný Sprint uzpůsobit.

velocity plan

Druhým grafem je Projekt Burndown graf, který kombinuje aktuální stav s odhady a vizualizuje předpokládaný konec projektu.

Vytiskněte každý sprint tyto dva grafy a vystavte je na veřejné místo, ať všichni na první pohled vidí jak se projektu a týmům daří.

Podívejte se na příklad toho, jak by takový burndown mohl vypadat.

Vyhodnocení Sprintu

Posledním krokem Sprint cyklu je vyhodnocení výsledků. Příslušný počet bodů za dokončené úlohy se odečte z produkt backlogu a ze zbývajícího počtu bodů a rychlosti týmu se upraví očekávaný konec projektu. V ideálním případě by tým měl dokončit všechny úlohy, které v rámci plánovacího meetingu naplánoval a které se zavázal splnit. To ovšem v reálu není vždy pravidlem a obzvláště na začátku, než tým dostatečně vstřebá hodnotu bodu a naučí se plánovat, se skutečnost bude od původního záměru odlišovat. Nezapomeňte, že hlavním cílem je naučit tým dobře plánovat a odhadovat svoji práci. Takže po každém Sprintu by měl tým dostatečně dobře vidět, nakolik se od plánu odlišuje, a uvědomit si proč to je. A při příštím plánováni se případných chyb vyvarovat.

Obecně je dobré udělat krátkou prezentaci, kde se porovná plánování a výsledky jednotlivých týmů za končící Sprint. Jednou z oblíbených Agile metod vizualizace jsou Burndown grafy (o tom více v dalším příspěvku). Současně je dobré ukázat progres celého projektu a jeho milestonů, aby týmy přímo viděli, jak se projekt posouvá jako celek a jestli je na tom dobře (Critical Chain úlohy, Concerto graf). Zhodnocení sprintu může pak přímo přejít do plánovacího meetingu, kde jednotlivé týmy připraví plán na další Sprint. Tyto dílčí plánovací meetingy je lepší mít odděleně pro jednotlivé týmy, výsledné plány na nový Sprint by ale týmy měly v rychlosti prezentovat zase veřejně, aby vzniklo povědomí o tom, co dělají jednotlivé skupiny, kolik bodů plánují a jak se jim následně daří plán plnit.

Zapojení zákazníka – Customer demo

Softwarové projekty často neodpovídají očekáváním zákazníka. A to i tehdy když jsou napsané podle specifikace. Ruku na srdce, určitě jste už někdy chtěli nějaký výrobek, popis přesně odpovídal, a když jste to nakonec získali či koupili, nějak to nebylo ono. Často to byly drobnosti, co výrobku chyběli k dokonalosti a praktičnosti. Stejná situace je i s vývojem a specifikací softwaru. Zákazníci očima vývojářů často nevědí, co chtějí. Vývojáři zase většinou nemají potřebný kontext či doménovou znalost prostředí a potřeb zákazníka.

Na to odpovídá Scrum proces zapojením zástupce zákazníků do procesu plánování. Zástupce zákazníka by měli být přítomni plánování na pre-planning meetingu, aby byli zapojeni do procesu a spolupodíleli se na určování priorit. Zákazník je pak ten kdo říká, co a kdy chce. Agile k tomu dodává praktiku zvanou customer demo, kde zákazník na prezentaci uvidí výsledek zadané práce. Customer demo je vhodné zorganizovat pravidelně na konci každého Sprintu. Zajistí se tak zpětná vazba a úlohy se mohou případně upravit podle potřeb zákazníka hned a předejde se složitému redesignu. Na zákazníka to neklade časově nijak velké nároky, navíc pravidelně, vždy na konci sprintu vidí výsledek, což je často k nezaplacení.

Proces plánování – Sprint planning

Podíváte-li se na běžné softwarové projekty, většina z nich končí daleko po naplánovaném konci. To je samozřejmě způsobeno několika faktory. Tím kdo plán dělá, nakolik je zkušený, nakolik umí odhadnout, co všechno bude potřeba naimplementovat, nakolik je obeznámen s procesem vývoje a samozřejmě kvalitou a spolehlivostí vstupní specifikace. Zkusme ale začít u jednotlivých vývojářů. Kolik z nich umí dobře odhadnout, kdy svoji úlohu dokončí. Kolik z těch úspěšných udělá dobrý odhad high-level oblasti – Story? Kolik z nich odhadne délku celého projektu a s jakou přesností? Asi tušíte, kam mířím. Vývojáři často neodhadnou ani úlohu na týden, natož cokoliv abstraktnějšího. Sprint Backlog Vám zajistí příslušnou granularitu úloh, Sprint pre-planning nastaví priority pro jednotlivé Story a přiřadí je týmům jako vstup na Sprint planning.

Pár zásad na začátek. Tým je ten kdo plánuje konkrétní úlohy na Sprint. Tým je ten kdo je přiřazuje úlohy jednotlivým lidem. Tým je ten kdo zajišťuje změny v přiřazení lidí na úlohy. A konečně tým je ten, kdo je zodpovědný za výslednou kvalitu a dokončení včas v rámci Sprintu. Z čistě psychologického hlediska tým se tím, že plán sám vytvoří, také zaváže k jeho splnění, tedy slíbí, že ho splní. K takovému cíli je samozřejmě psychologicky více vázán než k jakémukoliv direktivnímu nařízení, které nemůže ovlivnit.

Jak probíhá samotné plánování. Tým dostane jako vstup Story z pre-planning meetingu. Každá taková Story obsahuje jednotlivé úlohy v backlogu spolu s ohodnocením. V případě že granularita není dostatečná je čistě v pravomocích týmu úlohy rozdělit tak, aby bylo možné je dokončit v rámci jednoho Sprintu a naplánovat jen to, co věří, že dokončí. Je to jednoduché, ale na začátku se to tak nemusí zdát. Po každém Sprintu by mělo proběhnout vyhodnocení plánu, realita by se neměla moc lišit. V případě že s Agile začínáte, první Sprinty pravděpodobně nebudou naplánované zrovna ideálně. Důležité ale je tým učit a dát mu zpětnou vazbu. Za cca 3 Sprinty by plán měl být už dostatečně věrohodný a kvalitní.

Proces plánování – Sprint pre-planning

Je načase trochu popsat jak probíhá podle Agile a SCRUM plánování. Produkt backlog už máme definovaný, Story či jednotlivé úlohy jsou ohodnoceny body. Před každým začátkem Sprintu sezvěte tzv. expert-tým složený z klíčových lidí. Obecně budete chtít sezvat zástupce jednotlivých týmů, někoho z managementu, hlavního architekta, zástupce zákazníka/zákazníků a to včetně interních zákazníků v rámci firmy. Interním zákazníkem je každá skupina závislá na Vašem výstupu (takže třeba nezávislá skupina zajišťující formální testování). Cílem je zastoupit všechny skupiny jakkoliv zainteresované na výsledku projektu. Ti by pak měli na pre-planning meetingu společně vybrat oblasti, na kterých budou po následující sprint týmy pracovat.

Není úkolem přidělovat jednotlivé úlohy ani konkrétním lidem ani týmům, ale předvybrat pro každý tým příslušné high-level Story. Na konci každého Sprintu se v Burndownu vyhodnotí výsledky a nedokončené úlohy se vrátí zpět to produkt Backlogu. Před začátkem nového Sprintu se svolá další pre-planning meeting a znovu určí priority pro jednotlivé týmy.

Hlavním úkolem pre-planningu je umožnit komunikaci jednotlivých zájmových skupin (zákazník, management, architekt, …), koordinovat a pokud možno uspokojit jejich rozdílné zájmy a nastavit priority práce pro týmy.