Takétech debtPokročilý
Definice
Technický dluh je stav, kdy software nese následky rychlejšího nebo kompromisního rozhodnutí, které zjednodušilo dodání, ale ztížilo budoucí změny. Dluh může být vědomý i nechtěný; projevuje se složitějším kódem, chybějícími testy, zastaralými knihovnami, křehkou architekturou nebo dražším provozem a postupně vytváří „úrok“ v podobě pomalejšího vývoje.
Proč technický dluh vzniká
Technický dluh vzniká ve chvíli, kdy tým zvolí řešení, které je teď levnější než čistší varianta, ale později prodraží změny. Důvodem nemusí být nekompetence. Častou příčinou je termín uvedení produktu, nejasné požadavky, dočasná integrace, nedostatek testů nebo rozhodnutí ověřit trh dřív, než se investuje do robustní architektury.
Metafora dluhu je užitečná proto, že odlišuje jistinu a úrok. Jistina je samotná práce, kterou bude potřeba jednou udělat: refaktorovat modul, doplnit migrace, sjednotit API nebo nahradit zastaralou knihovnu. Úrok je každodenní zpomalení: delší code review, obavy z nasazení, více regresí a obtížnější onboarding nových vývojářů.
Úrok technického dluhu v každodenním vývoji
Technický dluh se nejčastěji pozná podle toho, že malé změny trvají překvapivě dlouho. Vývojář musí upravovat stejné pravidlo na více místech, testovat ručně scénáře, které by měly hlídat automatické testy, nebo obcházet staré rozhraní, protože jeho změna by rozbila mnoho závislostí.
Dluh se neprojevuje jen v kódu. Do technického dluhu patří také chybějící observabilita, ruční deployment, nekonzistentní konfigurace prostředí, nezdokumentované rozhodnutí v architektuře nebo databázové schéma, které už neodpovídá doméně. U webové aplikace se podobný dopad projeví i v měření po spuštění, protože bez jasných metrik tým neví, jestli zrychlené dodání skutečně pomohlo. S tím souvisí i měření úspěchu webové aplikace po spuštění.
Kdy je technický dluh rozumná volba
Technický dluh není automaticky selhání. Záměrný dluh může být racionální, když tým ví, co přesně odkládá, jaké riziko přijímá a kdy se k opravě vrátí. Příklad je prototyp platební funkce pro omezenou skupinu uživatelů, kde se dočasně zvolí jednodušší integrace, protože obchodní hodnota ještě není potvrzená.
Nezdravý dluh vzniká, když kompromis nikdo neeviduje, nikdo nerozumí jeho dopadu a další vývoj ho bez kontroly zvětšuje. V takové situaci se dluh mění z nástroje řízení rizika na skrytou brzdu produktu.
Jak tým technický dluh splácí
Splácení technického dluhu neznamená zastavit vývoj a všechno přepsat. Účinnější bývá průběžně odstraňovat dluh v místech, kterých se tým právě dotýká. Praktický postup je označit dluh v backlogu, propojit položky s konkrétním dopadem, přidat testy před refaktoringem a domluvit hranici, kdy už další funkce bez opravy nejsou bezpečné.
Dobré řízení technického dluhu vyžaduje jazyk srozumitelný pro vývoj i produkt. Místo abstraktní věty „kód je špatný“ pomáhá formulace „změna cenových pravidel dnes vyžaduje úpravu ve čtyřech službách a ruční regresní test“. Takové vyjádření převádí technický problém na náklady, riziko a plán.
Příklady z praxe
Duplicitní výpočet DPH v e-shopu
E-shop před kampaní rychle přidá výpočet DPH přímo do dvou různých částí aplikace. Funkce se dostane do produkce včas, ale při změně sazby musí vývojář najít a upravit více míst. Jedno místo zůstane zapomenuté, takže faktura a košík ukazují rozdílnou cenu.
function priceWithVat(price) { return price * 1.21; } function invoiceTotal(items) { return items.reduce((sum, item) => sum + item.price * 1.21, 0); }Odložené testy v administraci
Tým spustí novou administraci bez automatických end-to-end testů, protože zákazník potřebuje demo na veletrh. První vydání proběhne rychle, ale každá další úprava vyžaduje dlouhé ruční proklikání formulářů. Po několika měsících už přidání malého pole stojí víc času než původně ušetřené testy.
Časté omyly
- MýtusTechnický dluh znamená špatně napsaný kód.
- Ve skutečnostiTechnický dluh může vzniknout i u kvalitního týmu jako vědomý kompromis mezi rychlostí dodání a budoucí údržbou. Problém nastává hlavně tehdy, když kompromis není pojmenovaný, sledovaný ani plánovaně splácený.
- MýtusTechnický dluh vyřeší přepsání aplikace od nuly.
- Ve skutečnostiPřepis může odstranit část starých problémů, ale často vytvoří nové riziko, zpoždění a ztrátu znalostí ukrytých ve stávajícím systému. Bez změny procesů se podobný dluh vrátí i do nového kódu.
Časté dotazy
- Jak poznám technický dluh v projektu?
- Technický dluh poznáte podle opakovaných signálů, ne podle jednoho ošklivého souboru. Typické projevy jsou pomalé změny jednoduchých funkcí, časté regrese, ruční kroky při nasazení, strach upravit starší modul a dlouhé vysvětlování pravidel, která nejsou zachycená v kódu ani testech. Dobrý indikátor je otázka, zda stejná obchodní změna stojí v čase stále víc úsilí.
- Má se technický dluh řešit hned, nebo až později?
- Technický dluh se obvykle nemá řešit odděleně od produktu bez jasné priority. Rozumný postup je vyčíslit dopad na rychlost vývoje, stabilitu nebo provozní riziko a splácet dluh tam, kde blokuje aktuální plán. Samostatný refaktoring dává smysl, když existuje vysoké riziko incidentu, bezpečnostní problém nebo modul, který se bude brzy výrazně rozšiřovat.
- Dá se technický dluh nějak měřit?
- Technický dluh lze měřit nepřímo, protože samotná kvalita návrhu nemá jednu univerzální metriku. Užitečné jsou ukazatele jako čas potřebný na běžnou změnu, počet regresních chyb, míra pokrytí kritických testů, stáří závislostí, počet ručních kroků při release nebo množství duplicit v kódu. Měření má největší hodnotu, když je propojené s konkrétním dopadem na produkt.
- Jak zapisovat technický dluh do backlogu?
- Technický dluh by měl být v backlogu popsaný jazykem dopadu. Položka má říkat, kde dluh vzniká, jak brzdí práci nebo zvyšuje riziko a co znamená jeho splacení. Vhodný záznam není jen „refaktorovat objednávky“, ale například „sjednotit výpočet slev, aby změna pravidel nevyžadovala úpravu ve třech službách“.
Zdroje
- Technical debt(otevře se v novém okně)
- The WyCash portfolio management system(otevře se v novém okně)
- Managing Technical Debt(otevře se v novém okně)
- A systematic mapping study on technical debt and its management(otevře se v novém okně)