Můj toolchain – YouTrack

Blíží se pátek a tak zase něco spíchnu, ať máte co číst zítra po obědě. Navážem na předchozí článek, který představil celý toolchain Tapmates, Inc a podíváme se podrobněji na YouTrack.

Vyzkoušeli jsme kde co a nic z toho nám úplně nesedělo, nevyhovovalo. Např. Unfuddle, GitHub Issues, Basecamp, … Každý z těch nástrojů je v něčem lepší, v něčem horší, ale ani jeden se nedal pořádně použít na řízení projektů. Teď to hlavně myslím z pohledu programátora a lidí, kteří jsou za projekt odpovědní.

Co potřebujeme? Rozdělit projekt na komponenty, přiřadit jim vlastníky, QA, plánovat v kratších časových úsecích (milestony, sprinty, …), přidávat vlastní značky (tagy), mít různé pohledy na data, trochu více serioznější life cycle jednotlivých úkolů než je open / fixed, možnost napojení na IDE, repository se zdrojáky, ovládání pomocí commit message, … Výše uvedené nástroje vždy splňovali jen část požadavků a tak docházelo k tomu, že se to klasicky šulilo, hackovalo, … a výsledek byl po prvních týdnech snahy přinejlepším tristní. Jakmile nástroj nesplňuje vaše očekávání, neslouží vám, ale vy jemu, jsou data uvnitř nepoužitelná. Nikdo s tím nechce pořádně pracovat, fláká se to, … Ze všech nástrojů, které jsem kdy používal, jsem měl nejvíc rád Bugzillu. Ta se dala taky poměrně dobře konfigurovat, ale jinak to byl moloch – Perl, CGI skripty, … Možná je to už dneska jinak, ale rozhodně bych se nechtěl dostat do pozice, že bych ji musel spravovat. To fakt ne.

Jsem fandou JetBrains produktů a když přišel Peťan s tím, že bychom mohli zkusit YouTrack, zajásal jsem, že by světlo na konci tunelu? 🙂 Co to tedy ten YouTrack je? Na webu JetBrains je napsáno – _The Agile Issue Tracking and Project Tracking Tool _ – krátké, ale výstižné. Ještě tam snad chybí, že to je opravdu skvělý nástroj 🙂

Nebudu tady popisovat co všechno umí, protože to si můžete přečít tady:

Pokusím se shrnout proč používáme právě YouTrack a proč nám vyhovuje ze všeho nejvíc.

Nástroj má sloužit nám, ne my jemu

Steve Jobs měl filozofii – lidi neví co chcou a tak to vymyslíme za ně. Touto cestou jde i Basecamp a jemu podobní. Dobrý, ale nevyhovuje. Každý si ten projekt řídí tak trochu po svém a tyto jednoduché nástroje / služby / … nejsou šálkem mé kávy. To možná funguje u masovek, spotřební elektroniky, … ale ne tady. Jeden ze starších nákresů toho, jak u nás vypadá life cycle úkolu.

Pod úkolem si představte cokoli, počínaje designem, hovorem, naprogramováním nové fičury, … A QA není jenom člověk, který testuje nově naprogramované fičury, ale kdokoli kdo daný úkol zadal a potom ho zkontroluje. Jasně, že daný nákres neukazuje všechny cestičky jednotlivých úkolů, ale aspoň tušíte jak to přibližně vypadá. Dokud není úkol vyřešen (má stav Verified), pořád je to něčí zodpovědnost (Assignee).

Každý projekt v YouTrack je plně modifikovatelný. Může mít vlastní položky u každého úkolu, sdílet je s jinými projekty a nebo můžete některé položky odstranit aniž by to ohrozilo jiné projekty.

Takto si můžu přizpůsobit všechny projekty do nejmenších detailů. Jednotlivé položky a jejich výchozí hodnoty mám připravené. Teď přichází na řadu samotné workflow. Ruku na srdce – můžete napsat kolik dokumentů chcete, popsat workflow do nejmenších detailů, ale kdo to dodržuje, resp. kdo si to všechno pamatuje? A tak musíme lidi trochu nutit a taky jim trochu pomoc. V tomhle je YouTrack geniální, protože si můžu udělat vlastní workflow.

Vybírám si z přednastavených workflow a nebo si člověk napíše svá vlastní. K tomu slouží Workflow Editor. Což je samostatné IDE na správu YouTracku. Když QA nastaví stav úkolu na Verified, ruší se u nás hodnota Assignee. Můžete to opakovat pořád dokola, ale člověk je tvor zapomnětlivý, takže si vytvoříme třeba workflow s názvem tapmates-youtrack-verifiedNull a to vypadá takto:

Uložím, dám upload, zapnu v projektu a od této chvíle se tak všechno děje automaticky. Další věc na kterou nemusíte myslet. Nebo chcete lidi donutit, aby při změně stavu na Fixed nastavili i verzi v které je / bude daný úkol vyřešen? Není problém.

Jednoduché ukázky, ale stačí. Dají se dělat i mnohem složitější věci. Jakmile se rozhodnete jaké workflow chcete používat, YouTrack vám nabídne pomocnou ruku a můžete si ho přizpůsobit a ulehčit tak uživatelům práci s ním.

Vyhledávání, příkazy, …

Další pěkná věc je vyhledávání. Mimo klasického pohledu na úkoly, stromového pohledu (úkoly můžou mít různé vztahy), agile boardu, … je občas potřeba v těch úkolech něco najít. Tam můžu napsat v podstatě cokoli, gramatika je popsána tady, např.

project: Photolane for: me State: New, {In Progress}

Co mi to vrátí? Všechny moje úkoly na projektu Photolane, které jsou ve stavu New a nebo In Progress. Samozřejmostí je, že si ten dotaz můžu uložit a použít ho později aniž bych ho musel znovu složitě vymýšlet. A funguje to nejenom v prohlížeči, ale třeba i v AppCode.

Per projekt si můžu nastavit konfiguraci YouTracku a napsat si vlastní vyhledávací výraz, který mi potom bude vracet seznam úkolů v AppCode. Ale o tomhle propojení až někdy příště. Kdo si to chce najít už teď, tak je to fičura AppCode nazvaná Tasks & Contexts.

Teď už umíme efektivně vyhledávat. Co dál? Dejme tomu, že chci změnit stav na Verified u několika úkolů a jako líný tvor to nechci dělat ručně. Není problém. Vyhledám úkoly, otevřu si Command Dialog a …

… a mám to i s automatickým doplňováním. Co když jsem ještě línější a nechce se mi otvírat prohlížeč. Jabber, vyhovuje? Krom toho, že mě automaticky informuje o změnách u úkolů, které sleduji, tak si s YouTrackem můžu pokecat a rozdávat mu úkoly. Nevím jak, zeptám se …

… co mě čeká …

… o čem, že to PL-500 vlastně jě …

… tak mu změníme stav …

… a protože YouTrack ví, že lidi jsou líní, v odpovědi mi napsal – You can omit PL-500 in the following commands. To znamená, že pokud v další komunikaci neuvedu číslo úkolu, veškeré příkazy se budou týkat právě PL-500.

Po pár pokusech zjistíte, že příkazy jsou velmi dobrá vychytávka a budete je používat. Více si můžete přečíst třeba na blogu JetBrains. A samozřejmostí je, že příkazy můžete psát i do commit mesidží … Například:

Dynamic layout selection feature implemented #PL-500 State: Fixed

Pushnu do repa, tahle informace se dostane k YouTracku (sleduje git repa), ten vezme daný příkaz a aplikuje ho na úkol PL-500. Neboli stav úkolu se nastaví na Fixed, pomocí speciálního workflow se přehodí Assignee na QA a já můžu v klidu pracovat na jiném.

A teď trochu z jiného soudku

Když jsem byl o dost mladší, byl jsem střelec a někdy dost velkej. V některých oblastech jsem i dnes. Ale co se týká práce, už mám rád ve všem pořádek, přehled, vážím si svého času a času svých spolupracovníků. Když někomu zadávám úkol, snažím se ho specifikovat pořádně a nastavit k tomu vše potřebné. A očekávám to samé od ostatních. Nechci přebírat nekompletní zadání, nechci se dohadovat kdo co řekl, neřekl, … Chci si sednout, podívat se co mám dělat a začít pracovat. Případně zkontrolovat co kdo udělal. A to můžu jenom v případě, že vše potřebné mám k dispozici a dodržuje se nějaké workflow. V našem případě v YouTracku. Možná se někomu podobné fičury YouTracku zdají zbytečné, ale je potřeba si uvědomit, že v dnešní době jsou firmy jako Tapmates distribuované a to nejen v rámci ČR, ale i celého světa. A tak přichází na řadu komplikace s dostupností jednotlivých lidí, časová pásma, zvyklosti, … Proto je důležité si říct jakým způsobem se budou veškeré věci řešit. A YouTrack je v našem případě už jenom nástroj, který tuhle dohodu pomáhá udržovat, upozorňuje na chyby, které děláme a taky nám občas zrychluje práci, protože dost věcí se dá automatizovat. V každé chvíli si tak můžem ověřit stav projektu, milestonu, sprintu, podívat se na čem to visí a nikdo si nemůže vymýšlet, že mu Pepa nedodal X, Pepa říká, že o X nic neví, …

Nejen to. Jako programátor mám dva pracovní módy – pekelné soustředění a druhý mód, který teď nevím jak nazvat. V druhém módu zvednu telefon, odpovím na HipChatu, na mail, mrknu na Facebook, …, protože dělám na jednoduchých věcech, kompiluju, čekám na výsledky testů, … Potom je tu druhý mód kdy se pekelně soustředím, protože řeším něco složitého a nechci být vytržen z kontextu – sluchátka, muzika, nereaguju, … Nic mě nezajímá. Jakmile úkol dokončím, přepínám zpět na komunikaci a tady opět příchází na řadu YouTrack a definované workflow. Podívám se co kdo chce, co má třeba tag Waiting for Reply, pořeším maily a jdu se zase soustředit. Filemon to ve včerejším podcastu, Distribuované firmy a práce z domova, nazval pullováním. To je můj pohled na věc. A co když má druhá strana, spolupracovník, stejný pohled? Proč bych ho měl prudit když něco potřebuju? Na to mám YouTrack, definované workflow, zadám to tam a až to bude, tak si to pullnu. Jasně, že to není černobílé a občas potřebuju něco hned. Tak sundám sluchátka, houknu na kolegu nebo zavolám do Třince, … Ale snažím se to minimalizovat, protože i ostatní se chtějí soustředit a nebýt rušeni.

Už slyším ty kecy … Jéé, to je pruda to tam všechno napsat, já ti to řeknu do telefonu. Neboli druhá strana říká – nestojíš mi za to, abych to někam specifikoval a napsal, získává tak prostor sama pro sebe pro budoucí dohady co kdo řekl / neřekl, přehazuje to na někoho jiného, myslí si, že mám sloní paměť a všechno si budu pamatovat. A nebo, že si to zapíšu a ochotně se tak nechám povýšit na jeho zapisovatelku … Fakt nenechám 🙂

Výše uvedené workflow, pravidla & YouTrack, … se můžou zdát jako buzerace. Ale když se nad tím zamyslíte, není tomu tak. Máte potom ve všem pořádek, víte kdo je za co odpovědný a zabýváte se prací samotnou, ne tím overheadem kolem. YouTrack je prostě nástroj, který udržuje nějakou interní dohodu o tom, jak se bude pracovat, kam se co bude dávat, … aby si člověk mohl pullnout v době kdy on sám chce.

A teď zpátky na začátek. Už víte proč YouTrack? Zkuste to udělat v Basecampu, Unfuddle, GitHub Issues, … Good luck! 😉

Jinak YouTrack se dá pronajmout od JetBrains přímo v jejich cloudu. Máte vlastní instanci. A nebo si ho můžete koupit a provozovat sami na svém serveru. Potom ale přijdete o automatické upgrady, správu, migraci dat, …

P.S. Ve včerejším podcastu taky byla řeč o tom kdo je junior a senior, jak se to pozná, … Těžko se to definuje, to je fakt. Ale já mám za seniora toho, kdo pochopil výše uvedené principy a snaží se je dodržovat. Ne toho, kdo umí rozebrat procesor do atomu, ze spaní si opakuje celou instrukční sadu a přitom na všechno výše uvedené dlabe. Potom je spolupráce s takovým člověkem očistec …