Někdy to, co hledáte, bude jen malá knihovna, se kterou se seznámíte za večer, druhý den přidáte do projektu a třetí den jste na produkci… Jindy může jít ale i o celý nový programovací stack. Dnes se společně podíváme na proces zavedení nové technologie do našeho Trigama týmu. Čemu jsme čelili a co bylo potřeba řešit vám může naznačit, jakou cestou se vydat a vyvarovat se zbytečnému opakování chyb.

 

Příčina a důsledek

Náš tým došel zhruba před rokem a půl k tomu, že architektura JS projektů postavených kolem jQuery je dlouhodobě neudržitelná a že kvůli tomu se nám nedaří dělat tak dobře UXově vychytané webové stránky a na mobilní aplikace vlastně může náš tým také zapomenout. Po pečlivém výběru jsme jako tým zvolili React (a s tím související webpack, React Native, Babel, …). Jak ale zajistit, že v tom bude schopen pracovat celý tým?

 

Jak vyškolit tým?

Zvažovaných možností byla celá řada:

  • Nakoupit senior vývojáře – pomocí nich vytvořit míchaný tým senior vývojářů a zcela juniorních lidí. Když natrefíte na dobré lidi, bude to fungovat výborně, jenže ne všichni senior vývojáři chtějí učit ostatní.
  • Offline kurzy – poslat dosud nepolíbené vývojáře na kurz klíčových technologií. Případně lze zařídit i ve variantě zvaných přednášek a workshopů.
  • Online kurzy – vybrat na internetu dostatečně obsáhlé, pokročilé a aktuální online kurzy a ty potom v celém týmu absolvovat.
  • Odborné knihy – výrazně neinteraktivní a často řešící spíše samotnou technologii než vystavění projektu z ní. Obecně má část vývojářů problém se skrze ně prokousat.
  • Komunitní akce/konference – vyplynulo nám, že fungují spíše jako inspirační zdroje, než že by člověku poskytly ucelenou znalost a schopnost.

Naše cesta

Co jsme provedli a co se nám osvědčilo:

  • Online kurz – vybrali jsme dva kurzy na Udemy a zhruba polovina lidí absolvovala jeden a polovina druhý, vznikl slušný potenciál ke konfrontaci, avšak v některých bodech byla konfrontace udělána příliš pozdě (ptejte se „Proč děláš/používáš toto takto?“).
  • Team-wide – vyberte lidi a z nich utvořte skupinu (nový tým), který bude tuto technologii řešit, založte kanály na Slacku a dejte jim prostor. Naopak se pokuste z tohoto prostoru vystrnadit všechny, kteří vyjadřují vůči příslušnému cíli skepsi, agresi atp.
  • Čas strávený na kurzu je práce – alespoň částečně musí být čas na online kurzu považován za práci, výrazně to zvýší šance, že lidé kurz budou dělat a dokončí jej. Naopak absolvovat 20+ hodin ve svém volném čase není pro zadané či rodinou obdařené členy týmů úplně reálné.
  • Deadline – stanovte si, do kdy by kurz měl být dokončen.
  • Programujte brzy – opravdu programujte přidělené úkoly, zkoušejte si své vlastní drobné experimenty, a jakmile se na to budete aspoň trochu cítit, začněte to používat na nějakém pracovním projektu (i kdyby to bylo v režimu proof of concept).
  • Bavte se – proč se věci dělají, jak se dělají, co je hezčí, použitelnější nebo správnější? Jaké jsou best practices? Co jsou související a podobné technologie? Nehledejte fanaticky správná řešení, nebojte se najít správné věci vyzkoušením špatných a naučte se řešit nerozhodnost.
  • Sledujte technický dluh – obzvláště u prvních projektů, které bude tým s nově nabytými zkušenostmi realizovat, velmi pečlivě sledujte technický dluh (například skrze retrospektivy), a hlavně ho nezapomeňte splácet (z našeho prvního projektu plyne, že pokud není technický dluh v rozmezí 10–15 %, pravděpodobně ho ještě přehlížíte). Ale hlavně – nebojte se ho! Technický dluh zkrátka bude u těchto projektů vznikat, ne všechno vymyslíte správně hned napoprvé, chybami se člověk učí. Mimo jiné se vám krátkodobě propadne efektivita code review a zvýší počet bugů.
  • Vyhodnoťte volbu – s odstupem po realizaci prvního projektu se všichni sejděte a zhodnoťte volbu technologie, jaké možnosti to přineslo/vzalo, kolik to rámcově stálo a co z toho plyne pro další projekty.

 

Celkově vzato hodnotíme rozšíření znalostí našeho PHP/Nette týmu o znalost React (Native) během roku a půl jako výrazný úspěch, který naší firmě otevírá nové možnosti na poli webových aplikací, progresivních webových aplikací či mobilních aplikací.