Příliš mnoho bludů
Bronislav Klučka, 05. 3. 2025 21:12
Napadlo vás někdy...
Někteří lidé si myslí, že dependency injection by mělo být použito všude a je nejnovější technologií. Podobně někteří lidé si myslí, že layered architecture vyřeší všechno, a další si myslí to samé o microservices.
Někteří lidé si myslí, že serverless je vhodné vždy, jiní, že vše by mělo být napsané v Rustu na backendu a Vue3 na frontendu.
Někteří lidé si myslí, že stačí na jednoho člověka nalepit Product Ownera, na jiného Scrum Mastera, poslat je na 2denní certifikační kurz, mít standupy, reviews, retrospektivy, používat Jiru a máte agilní tým, který praktikuje Scrum.
Napadlo vás někdy...
Toto vše má jeden společný atribut: nepochopení hodnot a principů.
Pyramida
Na základě čeho děláte rozhodnutí a co je ovlivňuje? Co dělá jedno chování konzistentní a jiné nekonzistentní?

Hodnoty
Hodnoty reprezentují základní nastavení. Vše, co děláte, filtrujete těmito hodnotami. Hodnoty definují, co je v pořádku a co není, a reprezentují nejdůležitější a chtěné atributy toho, co a proč děláte a kým jste. Jsou motivací na pozadí všeho.
Jsou odpovědí na otázku: "Proč děláte to, co děláte?"
Principy
Principy jsou základní pravidla, která podporují hodnoty a nastavují hranice. Jsou pravdou za vaším běžným denním chováním. Každá praktická akce, kterou provedete, obsahuje tyto principy.
Jsou odpovědí na otázku: "Jak děláte to, co děláte?"
Praktiky
Vaše běžné chování na denní bázi.
Nástroje
Nástroje používáte pro svou denní operativu.
Nástroje musí odpovídat praktikám, které jsou založené na principech, jež odrážejí hodnoty.
Cargo kult
Cargo kult je asi nejrozšířenější a nejnebezpečnější blud, se kterým jsem se setkal. Název pochází z chování kmenů v Pacifické oblasti během druhé světové války. Během války armáda USA vytvořila na ostrovech v Pacifiku základny. Původní obyvatelé viděli lidi se sluchátky na uších, jak mávají vlajkami, a pak dorazil náklad (cargo) letadlem.
Poté, co armáda odešla, původní obyvatelstvo začalo nosit na uších kokosové skořápky, mávat látkou a stavět přistávací plochy. Nerozuměli tomu, jak letectvo funguje, proč vojáci dělali, co dělali, nebo proč náklad vůbec dorazil. Věřili, že napodobováním chování dosáhnou stejného výsledku – dorazí náklad.
Kolik chování je jen imitace? Vidíme někoho něco dělat, přečteme si článek o někom/něčem, slyšíme o někom/něčem a napodobujeme chování bez pochopení hodnot a principů, na kterých je daná věc založena. Bez pochopení základů "proč" a "jak".
Zlaté kladivo
Termín zlaté kladivo označuje nadužívání specifického nástroje nebo praktiky k vyřešení všech problémů.
Měli bychom používat SPA založené na Vue na všechno? Měli bychom? Proč?
Měli bychom použít layered architecture na backend? Opravdu? Proč? Proč jsme si vybrali tento styl a ne jiný? Máme důvod, nebo je to proto, že to "takhle děláme vždycky"?
To nejhorší, co může developer tvrdit, je: "Dělám to takhle vždycky už 20 let." Jediné, co mi to řekne, je, že se za 20 let nic nového nenaučil.
Stříbrná kulka
Termín stříbrná kulka popisuje iluzorní představu, že existuje jednoduché řešení pro komplexní problém. Existovat může, ale ne proto, že si to někdo přeje.
Potřebujeme více zákazníků? Přidejme více cool tlačítek do naší aplikace! Nicméně neexistuje korelace mezi počtem featur a úspěchem aplikace. Všimli jste si někdy, jak jednoduchý je Gmail nebo Netflix?
Potřebujeme lepší software. Musíme najmout lepší developery. Možná ano, možná ne. Jsou developeři opravdu důvodem? Hledali jste důvod?
Potřebujeme lepší software. Musíme najmout lepší product managery a ownery. Možná ano, možná ne. Jsou PM/PO opravdu důvodem? Hledali jste důvod?
Tvorba komerčního software je komplexní disciplína. Neexistuje žádné kouzelné řešení všeho.
Více příkladů
Co takhle jeden technický a jeden organizační?
Dependency injection
DI existuje pro řešení specifického problému: možnost poskytnout funkcionalitu bez toho, aby konzument dané funkcionality věděl, odkud pochází. Konzument není zodpovědný za její vytvoření a neměl by být. Například logování na aplikační úrovni. Funkce a třídy by neměly vědět, kde se Logger vzal, jak funguje, kdo ho vytváří a uvolňuje. Jediné, co potřebují vědět, je, že existuje nějaké rozhraní (interface), které poskytuje logovací funkcionalitu.
Jak se DI běžně používá? Řekněme, že máme modul, který má na starost uživatele. Vytvoříme controller, service, repository a model vně tohoto modulu v DI kontejneru na aplikační úrovni a složíme vše postupně pomocí DI. Moje otázka zní: proč? Proč aplikační úroveň ví, jak funguje interní struktura modulu? Proč je jeden DI kontejner pro celou aplikaci? Proč je definice "DI" pro modul uživatelů vedle definice "DI" pro například fakturační modul? Co mají tyto dva moduly spolu společného? Neměl by být modul zodpovědný za vlastní funkcionalitu bez toho, aby interní strukturu zveřejnil? Neměla by service vědět, jaký přesně repository potřebuje? Proč je definován zvenčí? Proč definujeme "DI" jako třídy místo minimalistických interfaces? Proč předáváme "DI" v konstruktoru, i když s danou třídou pracuje jen jedna metoda?
Proč? Protože všichni to tak dělají.
Scrum
Agilní vývoj software se stal módou. Stal se produktem, který prodávají konzultanti, kteří nikdy žádný projekt nevedli, a brandem, který firmy hrdě hlásí, aby vypadaly moderně a dynamicky. Jak se potom dělá Scrum? Management definuje priority ("zákazníci jsou hloupí, s těmi nemluvíme"), management definuje timeframes ("developeři jsou hloupí a nerozumí byznysu") a i to, jak mají dělat svou práci ("na psaní testů nemáme čas"). Developeři mají štěstí, když mohou ovlivnit scope toho, co se vejde do sprintu... občas... a zákazníci mají štěstí, když product manager (nebo někdo jiný) ve slonovinové věži zvažuje jejich potřeby.
Proč je Scrum nejoblíbenější? Není nejlepší agilní framework, ale je to nejlepší volba, jak se tvářit agilně.
Co hodnoty a principy agilního vývoje software? Kdy naposledy jste je četli?
Vždy se ptejte “proč”
„Ono se to tak dělá“ není argument. Může to být správně, ale je to správně pro nás? Teď, v tuto chvíli? Volby by měly mít jasně definovanou, racionální hodnotu.