Co je technický dluh? Jak ovlivňuje váše podnikání? Jak mu můžete předejít a jak s ním naložit, když už vznikl? To vše se pokusíme vysvětlit v této dvoudílné sérii článků.
Technický dluh. Zní to strašidelně, že? Ukážeme vám to špatné, to dobré a vše mezi tím. Tato část bude teoretická, ale o to více důležitá. Na konci článku jsme také připravili skutečný příklad technického dluhu a jeho důsledků. Nyní, když jsme si řekli hlavní body, můžeme pokračovat.
Wikipedia to popisuje takto:
V softwarovém vývoji je technický dluh (známý také jako návrhový dluh nebo dluh zdrojového kódu) předpokládaná cena dodatečné práce způsobená výběrem snadného (omezeného) řešení nyní místo použití lepšího přístupu, který by trval déle.
Ačkoli je tento popis obecně správný, není to tak jednoduché. Technický dluh je skrytá cena každého IT projektu, ale ne každý případ je nebezpečný nebo způsobený špatnými rozhodnutími vašeho vývojářského týmu (jak uvidíte v následujícím vysvětlení).
Slovo "dluh" není náhoda, protože má mnoho společných rysů s ekonomickým dluhem. Je naprosto důležité jej pravidelně "splácet". Ignorování a hromadění technického dluhu může vést k fatálním důsledkům, v nejhorším případě dokonce k bankrotu. Ve světě softwarového vývoje to znamená takový software, který nefunguje nebo nemůže dále probíhat vývoj, což vede k významným investičním ztrátám.
Zajímavost: V americké studii "Náklady na špatný software v USA" z roku 2018 Herb Krasner vyčíslil, že celkové náklady na špatně vyvinutý software činí přibližně 2,8 bilionu dolarů. Pro srovnání to je více, než HDP většiny zemí světa.
Podívejme se, na jaké typy technického dluhu obvykle narazíte. Martin Fowler na to napsal skvělý článek, s nímž souhlasíme. Existují v podstatě 4 typy technického dluhu.
Nyní známe nejběžnější typy technického dluhu, ale jaké jsou nejběžnější příčiny mimo ty výše uvedené?
V business světě existuje několik "zlatých pravidel" a zde je jedno z nich. Ze známé trojice Čas - Náklady - Kvalita můžete mít pouze dvě. Pokud tlačíte váš vývojový tým k vytvoření něčeho levného a rychlého, nedostanete kvalitu. Pokud chcete kvalitu a rychlé dodání, nebude to levné. To platí ve vývoji zakázkového softwaru stejně jako kdekoli jinde, pokud ne více. Špatná volba dvou z těchto tří možností často způsobuje technický dluh.
Nejsme blázni a chápeme, že někdy je technický dluh nevyhnutelný a v konkrétním případě to dokonce dává smysl (např.: rychlý vývoj MVP pro ověření na trhu). V tomto případě, kdy máte omezené zdroje a chcete co nejdříve otestovat celý projekt, nemusí dávat smysl vybudovat složitou architekturu připravenou škálovat na miliony uživatelů, připravovat skvělé automatizované testy, různé sandboxy, celý proces CI/CD a další důležité aspekty moderního vývoje. Zaměřujete se prostě na co nejrychlejší dokončení. A to je v pořádku, pokud chápete rizika a budoucí náklady (v některých případech by mohlo být nutné dokonce přepsat celou první verzi aplikace).
Věc se má nicméně tak, že kalkulovaný technický dluh je bohužel obvykle součástí pouze malého procenta projektů.
Co obvykle v Moravio zaznamenáváme, když například zachraňujeme projekty, je přesný opak nebo přesněji řečeno, nezodpovědný & záměrný technický dluh z výše uvedeného popisu. Technický dluh je opomíjen, neustále roste, není zdokumentován a není spravován.
Je zde také ještě jedna věc, která by měla být řečena. IT odvětví se vyvíjí jako žádné jiné na světě. Technologie, které jsou špičkové letos, mohou mít příští rok výrazně lepší verze nebo alternativní technologie. Tak to prostě chodí. Měli byste se vždy snažit udržet svůj projekt aktualizovaný. Neříkáme, že potřebujete aktualizovat první den, kdy je vydána nová verze technologie (naopak to důrazně nedoporučujeme kvůli chybám, které obvykle v prvních dnech vznikají), ale je vhodné udržovat váš projekt na nejnovější stabilní a dlouhodobě podporované verzi v rozumném intervalu. V jistém smyslu lze toto samo o sobě také nazývat technologickým dluhem, což je důvod, proč na začátku článku hovoříme o tom, že technologický dluh je součástí každého projektu.
Prostě řečeno, hodně. Zde je jen několik příkladů:
Vše závisí na charakteru vašeho podnikání. Vše to lze také přímo nebo nepřímo převést na finanční ztráty.
Myslete na technický dluh jako na živou část vašeho projektu. Vyčleňte čas pro vaše vývojáře, aby se s ním mohli vypořádat. Monitorujte jej a dokumentujte (jednoduchý aktualizovaný úkol v JIRA nebo stránka v Confluence může udělat zázraky). Pracujte s vaším technickým dluhem a průběžně ho zmenšujte. To je jediný způsob, jak jej dlouhodobě udržet pod kontrolou. Pokud to neuděláte, mnohonásobně vyšší náklady vás pravděpodobně dříve či později doženou.
V Moravio se kromě poskytování dedikovaných vývojových týmů také věnujeme co-developmentu & outstaffingu a záchraně projektů.
Právě na jednom z projektů, který jsme zachraňovali, chceme ukázat dnešní příklad. Projekt byl velmi zanedbáván a zahraniční klient se na nás obrátil velmi pozdě. Klient v té době také nebyl příliš zkušený. Takže si sám nevšiml problémů, dokud nebylo zřetelně vidět, že je něco špatně. Projekt byl o 2-3 hlavní verze PHP a Laravel frameworku pozadu, nepořádek v kódu, špatná architektura, tisíce zbytečných databázových volání, desítky nepoužívaných nebo neaktualizovaných NPM balíčků, šest různých knihoven pro práci s obrázky, jeden velký soubor pro CSS a JavaScript, špatné směrování URL, žádná dokumentace a testy. Na co si vzpomenete.
Nebojte se. Všechny problémy jsme nakonec úspěšně vyřešili, ale na příkladu výše je krásně vidět, do jakých technických i business problémů se můžete potenciálně dostat.
Tato část byla trochu teoretičtější. V další části vysvětlíme, na co si dát pozor, abyste odhalili technický dluh, jak se vypořádat s technickým dluhem a pár dalších příkladů z našich osobních zkušeností z první ruky.
Blog posts you may be interested in
New blog posts you may be interested in
Pomáháme korporacím, středním podnikům a startupům s digitálními produkty.