Što je tehnički dug i zašto softver postaje sporiji za mijenjanje?
Što je tehnički dug? Jednostavna definicija, usporedba sa zajmom, kako nastaje, kako ga vlasnik prepozna, primjer u eurima i kada je dug prihvatljiv.
Tehnički dug dodatni je posao koji kasnije plaćate zato što je softver izrađen brzim umjesto ispravnim putem. Pojam je 1992. uveo Ward Cunningham: isporučiti prečac isto je što i uzeti zajam. Funkciju dobivate prije, ali svaka sljedeća izmjena stoji više dok netko ne počisti za sobom. Tekst je za vlasnike čiji softver iz mjeseca u mjesec postaje sporiji i skuplji za mijenjanje.
Kratak odgovor
- Glavnica je sam prečac: neuredan modul, kopirani kod, zastarjela biblioteka.
- Kamata je dodatno vrijeme koje zbog njega stoji svaka sljedeća izmjena.
- Dug nastaje zbog rokova, prečaca kojima se nitko ne vraća, odlaska ljudi i zastarjelih biblioteka.
- Vlasnik ga vidi kao procjene koje stalno rastu, popravke koji kvare nešto drugo i jednu osobu koja se jedina “usudi” dirati dio sustava.
- Otplata znači planirane sate čišćenja uz novi razvoj, i to ondje gdje najviše mijenjate.
- Dio duga je prihvatljiv: MVP, provjera ideje, alat koji ćete baciti.
Odakle pojam: usporedba sa zajmom
Cunningham je usporedbu iznio 1992. u izvještaju s konferencije OOPSLA o sustavu WyCash: isporuka koda u prvoj verziji jednaka je zaduživanju. Malo duga ubrzava razvoj, napisao je, ako se brzo vrati preradom. Opasan je dug koji se nikad ne vrati: svaka minuta provedena na kodu koji nije baš ispravan računa se kao kamata.
Usporedba sa zajmom poštena je jer zajam sam po sebi nije loš. Tvrtka se zadužuje da bi brže krenula. Problem nastaje kad dug nitko ne prati, kamate se gomilaju i jednoga dana većina proračuna odlazi na otplatu umjesto na nove stvari.
Kako tehnički dug nastaje
- Rokovi. “Neka radi do ponedjeljka” često je dobra odluka. Problem je kad utorak nikad ne dođe.
- Prečaci koje nitko ne počisti. Ista logika kopirana na tri mjesta, vrijednost upisana izravno u kod, test koji nedostaje. Svaki je sitan, a zajedno usporavaju svaku izmjenu.
- Posao se promijenio, kod nije. Sustav je zamišljen za jedno skladište, a sad radi za četiri. Izvorni dizajn više ne odgovara.
- Zastarjele biblioteke. Okviri i biblioteke stare. Preskočite nadogradnje dvije godine i redovna nadogradnja postane projekt.
- Ljudi odlaze. Znanje koje nitko nije zapisao ode s njima, a sljedeći programer radi sporije i opreznije.
Četiri vrste duga
Martin Fowler u svojem kvadrantu tehničkog duga (2009.) dug dijeli po dvjema osima: je li namjeran ili nenamjeran i je li razborit ili nepromišljen.
| Nepromišljen | Razborit | |
|---|---|---|
| Namjeran | ”Nemamo vremena za dizajn.” Prečaci bez plana otplate. | ”Moramo isporučiti sada, a posljedice rješavamo poslije.” Svjesna odluka s planom. |
| Nenamjeran | ”Što su to slojevi?” Tim nije znao bolje. | ”Sad znamo kako je trebalo.” Spoznaja tek nakon izrade. |
Problem kvalitete samo je nepromišljena polovica. Razborit dug normalan je dio izrade softvera: ispravan dizajn upoznajete izradom prve verzije.
Kako ga prepoznaje vlasnik bez tehničkog znanja
- Svaka izmjena stoji više od prethodne, iako izgleda jednako mala.
- Popravak na jednom mjestu pokvari nešto nepovezano.
- Nove verzije izlaze sve rjeđe i rizičnije, a za njima slijedi tjedan popravaka.
- Samo se jedan programer usudi dirati dio sustava.
- Procjene dolaze uz rečenicu “ovisi što ćemo ondje pronaći”.
Primjer s brojkama: kamata u eurima
Izračun je ilustrativan, a ne podaci klijenta. Vaš sustav dobiva 4 izmjene mjesečno. U urednom kodu tipična izmjena traje 8 sati, a u ovom sustavu 20 sati, jer programeri najprije moraju razmrsiti što bi izmjena mogla pokvariti.
- Uredan kod: 4 × 8 = 32 sata mjesečno.
- Kod s dugom: 4 × 20 = 80 sati mjesečno.
- Kamata: 48 sati mjesečno. Uz 40-60 € po satu (naša cijena, bez PDV-a) to je 1.920-2.880 € mjesečno, odnosno 23.040-34.560 € godišnje za rad koji ne donosi ništa novo.
Recimo da tri od četiri izmjene padaju u isti modul. Jednokratnih 60 sati čišćenja spušta te izmjene s 20 na 10 sati i štedi 30 sati mjesečno. Čišćenje se isplati za dva mjeseca. U tome je cijela logika otplate: počnite ondje gdje najviše mijenjate.
Niste jedini koji plaćate kamatu. U Stripeovu istraživanju Developer Coefficient (rujan 2018.) prosječni programer na tehnički dug troši procijenjenih 13,5 sati od 41,1-satnog radnog tjedna, otprilike trećinu.
Kako izgleda otplata u mjesečnoj suradnji
Otplata duga nije šestomjesečna prerada. U mjesečnoj suradnji na održavanju i razvoju softvera to je dio sati: programer počisti dio na kojem ionako radi, doda testove prije rizičnih izmjena, održava biblioteke ažurnima i vodi kratak pisani popis poznatog duga s grubom procjenom za svaku stavku. Prioritet određujete Vi, isto kao za nove funkcije.
Koliki je mjesečni proračun za to obično, opisuje članak održavanje softvera: cijena i podrška. Ako je dug toliko dubok da je svaka izmjena kocka, prije nego što nekomu platite daljnje krpanje pročitajte naslijeđeni softver: migracija ili novi razvoj. Ako sustav preuzimate od drugog dobavljača, počnite s člankom preuzimanje softvera od druge agencije.
Kada je dug prihvatljiv
- MVP ili provjera ideje. Brzina je važnija od savršenog koda dok ne znate radi li proizvod. Vidi kako izgraditi MVP.
- Kratkotrajan alat. Skripta za jednu migraciju ili kampanja koja završava u ožujku ne treba savršen dizajn.
- Kod koji nitko ne mijenja. Dug naplaćuje kamatu tek kad kod dirate. Neuredan modul koji se dvije godine nije mijenjao može ostati kakav jest.
Pravilo: dug uzimajte namjerno, zapišite ga i znajte kada ćete ga vratiti.
Često postavljana pitanja
Je li tehnički dug isto što i greške u softveru? Nije. Greška je nešto što ne radi. Tehnički dug je kod koji radi, ali ga je skupo mijenjati. Dug često vodi do više grešaka jer izmjene u zapetljanom kodu kvare druge stvari.
Može li se tehnički dug izmjeriti? Približno. Alati poput SonarQubea procjenjuju ga iz koda, ali vlasniku je korisnija mjera vrijeme: koliko izmjene traju danas u odnosu na prije godinu dana.
Stvara li kod koji piše AI tehnički dug? Može, i to brzo. To je zasebna tema, opisana u članku vibe coding: AI generirani kod u produkciji.
Povezani članci
- Održavanje softvera: cijena i podrška nakon lansiranja
- Naslijeđeni softver: migracija ili novi razvoj?
- Ugovor o održavanju softvera i SLA: što mora sadržavati
Postaje li Vaš softver sve sporiji za mijenjanje?
Možemo pregledati kod, iskreno Vam reći gdje je dug i koliko Vas stoji te ga otplaćivati u sklopu redovnog rada. Pogledajte načine suradnje.
Javite nam se na [email protected] ili putem obrasca na našoj stranici.