neděle 6. února 2011

Proč selhává tradiční rozdělení rolí při vývoji

Tradiční rozdělení rolí při softwárovém vývoji na architekta, designera, admina, databázového specialistu a k tomu manažera je největší omyl v softwárovém inženýrství. Proč fungují projekty, kde nejsou architekti, nejsou databázoví specialisté a naopak kolabují projekty jsou zastoupeny všechny tyhle role? Je to odcizením od podstaty vývoje a to je doručení finálního produktu. Rozškatulkováním na jednotlivé specializace rozmělňujeme obecné vnímání problému jako celku.

Funguje to v reálném životě? Nepřenositelnost neuznávám, paralely jsou výborné. Přijde mi, že to je jako kdybychom měli lidi, co napíšou recept jak upéct dort. Ten recept dostane jiná skupina, která ho nějak pochopí, ukvedlá těsto a hodí ho do trouby nastaví pečení. Potom je tu další skupina lidí, co sleduje jaká je v troubě teplota a jestli se to náhodou nespálí. Na talíř to dostane úplně jiná skupina lidi, kteří jsou diabetici, takže ten dort stejně nesežerou. Ťukám si na hlavu, protože o vaření a potažmo pečení dortu vím kulové, ale i s takto omezenou znalostí si představím jednoho kuchtíka, který je tam od pochopení receptu až po ochutnání finální podoby.

Paralelu s pekárnou, kde se pečou rohlíky jak na běžícím pásu bych nehledal, protože softwarový vývoj je cokoliv jiného jenom ne sekání stejných výrobků.

Dalším problémem je něco jako kolektivní vlastnictví. Každá role vlastní jenom kousek problému a ani jí vlastně nezajímá, jaké problémy bude mít ta role vedle. Práce designera končí u návrhu uživatelského rozhraní, architekt navrhne něco co vývojáři nejsou schopni naimplementovat a nebo je to totálně mimo mísu, vývojáři udělají něco k čemu nebudou mít Operations nástroje. K tomu musíme započítat ještě manažera, což je většinou uměle vytvořená role, kterou máme jenom protože jsme rozdělili vývoj do roli a obsadili do nich lidi, kteří spolu nejsou schopni komunikovat. Je to začarované kolečko, kde se problémy přehazují jako horké kaštany.

Přijde mi jako kdyby tenhle systém s rolemi vymyslel někdo komu se nepřepnul mozek z návrhu programu do reálného světa. My to role designujeme jako objekty, kde má každý svojí odpovědnost a svoje rozhraní. Bohužel tedy bohudík na rozdíl od programu nemáme v tom reálném světě pod rukou ten kontext, ve kterém hrají roli takové drobnosti jako mezilidské vztahy, osobní ambice a x dalších faktorů.

Všechno špatně a zpátky na stromy přátelé.

Klíčem k úspěšnému vývoji, pardon jedním z klíčů, je nemít na všechno specialistu naopak. Je jedna role, ta role se jmenuje softwarový vývojář. Ten je schopen kód navrhnout, otestovat, nasadit, udržovat a hasit v něm problémy pokud nastanou. Samozřejmě máme softwarové vývojáře, kteří jsou zkušení a nezkušení, záměrně nepoužívám slovo horší nebo lepší. Proto vývojář většinou nepracuje sám, ale vždycky s někým spolupracuje. Softwarové vývojáře skládám do větších celků, skupin, aby byl ten mix mezi tím co mají doručit a tím co skupina umí byl vyvážený.

Samozřejmě stále existují lidé, kteří nejsou v první řadě softwarový vývojáři, ale jsou to lidé zodpovědní a nebo lépe řečeno garanti za určité oblasti. Anarchie to může být jenom částečná.

Velice se mi líbí to o co se pokoušíme v GoodData, ještě nemůžu napsat, že děláme, ale jsme na cestě a tomu se říká DevOps. Pokud jste od DevOps neslyšeli, pak třeba podcast 39. Neni to úplné splynutí rolí, ale ten rozdíl mezi některými rolemi to skrývá úplně. Jeden člověk jde s kódem od jeho návrhu (prototypu), přes implementaci, otestování až po deployment. Což má samozřejmě za následek takové detaily, jako že logování, které by normálně odfláknul, vyprecizuje, protože jediné co bude mít při řešení problému bude právě ten log, do kterého zapisuje. Stejné je to s deploymentem a nebo například databázw, u které bude muset zajistit ve spoluprací s někým kdo je zodpovědný za produkci její zálohování.