Tehnički dug je nešto sa čime se developeri vrlo često susreću – želeli oni to, ili ne.
Ako radite u softverskoj industriji, velike su šanse da ste čuli za termin „tehnički dug“. On se odnosi na sve dodatne troškove koji će nastati kada prilikom rada na projektu prioritet postane brza isporuka, a ne savršen kod.
Ovaj izraz, tačnije metafroa, pokriva bukvalno sve ono što nije urađeno, ili nije urađeno kako treba da bi projekat bio završen na vreme – od bagova do nedostajuće dokumentacije.
S obzirom na to da su metafore podložne apstraktnom tumačenju, prava i precizna definicija tehničkog duga je teško ostvarljiva. Različiti ljudi su razvili sopstvena tumačenja tehničkog duga tokom godina, ali u svim tim brojnim primerima, pojavljuje se nekoliko tema koje nam mogu bolje približiti ovaj termin i načina na koji developeri gledaju na njega.
Tehnički dug je zapravo alat
I to alat koji mnogi koriste kako bi stekli prednost u radu. Tehnički dug je tako svaki kod koji dodamo sada a koji će zahtevati više dodatnog rada kasnije kako bismo ga popravili – ali sa ciljem da naglo ostvarimo potrebne rezultate.
Tehnički dug ima svoje posledice
Do tehničkog duga dolazi kada developeri prave prečice prilikom razvijanja koda kako bi brže ostvarili cilj. To međutim, ima svoje posledice koje se najčešće ogledaju u ružnijem kodu koji je teže održavati. Ova situacija se može porediti i sa uzimanjem kredita – zahvaljujući njemu danas možete da ostvarite više, ali na kraju ćete platiti višu cenu.
Akademska definicija tehničkog duga
Članak u „Information and Software Technology“ žurnalu definiše tehnički dug veoma preciznim terminima:
„Tehnički dug opisuje posledice akcija prilikom razvoja softvera koje namerno, ili nenamerno, na prvo mesto stavljaju vrednost klijenta ili ograničenja projekta kao što su rokovi, a ne tehničku implementaciju i dizajn“.
Kako prepoznati tehnički dug?
Postoji nekoliko znakova upozorenja koji upućuju na to da je projekat stvorio tehnički dug:
- Bagovi koji ruše ceo sistem;
- Preklapanje tehnologija usled višeg nivoa kompleksnosti;
- Nefunkcionalni zahtevi softvera prilikom kog kod krši NFR ograničenja. Primeri uključuju spore performanse, bezbednosne hakove, nepouzdane rezultate koda, teško korišćenje i gubitak kompatibilnosti sa drugim softverom ili hardverom.
Ukoliko se ovi problemi ne reše i dug ne isplati, dolazi do negativnog korisničkog iskustva i smanjene bezbednosti.
Negativan i ubitačan tehnički dug
Tehnički dug se može pojaviti u mnogim formama u softverskom projektu. Neke su opasnije od drugih, pa ih možemo podeliti u dve kategorije: One koje će negativno uticati na projekat, i one koje će ga definitivno ubiti.
Negativan tehnički dug
- Loše dizajniran kod
- Ad-hoc arhitektura
- Manjak testiranja
- Nepostojanje provere koda
- Nepotpuna dokumentacija
- Manjak kontinuirane integracije i isporuke
Ubitačan tehnički dug
- Korišćenje nestabilne tehnologije
- Oslanjanje na neodržavani open source
- Nepravilni algoritmi
- Pogrešan izbor programskog jezika
- Preskakanje dizajn faze projekta u potpunosti
- Loš izbor komunikacionih protokola
Primera radi, pisanje lošeg koda će značajno usporiti projekat, ali ako napišete ceo projekat u frameworku koji se više ne održava ili nema funkcije ključne za vaš projekat, možda nećete dobiti šansu za iskupljenje koja ne uključuje ponovno pisanje celog projekta.
Pronalaženje pravog balansa između brzine i kvaliteta
Kvalitet i performanse određenog softvera su ključni za dobro korisničko iskustvo – a brzina je bitna za postizanje poslovnih ciljeva u zadatom vremenskom roku. Zato upravljanje tehničkim dugom zahteva balans između kvaliteta i brzine. Brza zaobilazna rešenja možda garantuju postizanje svih rokova, ali je važno i da budete svesni njihove cene. Tehnički dug možda izgleda bezopasno, ali ako se neko ne pozabavi njime, u nekom trenutku brzina i agilnost više neće biti opcija.
Junior developeri možda nemaju dovoljno iskustva – usled čega mogu da budu u iskušenju da ignorišu tehnički dug sve dok on ne postane ogroman, ili jednostavno imaju probleme da identifikuju i reše problem, a to je nešto čega svi trebaju da budu svesni.
Kako developeri mogu da smanje tehnički dug?
- Ako ste u agile timu, gledajte da tehnički dug bude rešen u kvartalu. Možda nećete uspeti da rešite sve, ali umanjite ga na ključne stvari koje mogu biti rešene u sprintu i polako ih eliminišite do samog kraja.
- Gledajte da rezervišete vreme za rešavanje tehničkog duga u četvrtom kvartalu kada se poslovi polako primiruju.
- Pokušajte da pomoć dobijete od vendora koji će se uključiti u rešavanje tehničkog duga, umesto vašeg tima. Ponekada vaši admini i arhitekte mogu da se fokusiraju na regularne potrebe posla, a vaši vendori mogu da se bave tehničkim dugom nezavisno, i uz minimalni nadzor.
- Korišćenje dokazanih modularnih komponenti će značajno smanjiti vreme razvoja na duge staze kada počnete da ih ponovo iskorišćavate u durgim delovima vašeg projekta. Ako je vaš kod modularan, to olakšava sređivanje nezavisnih modula jer promene neće obuhvatiti ceo projekat.
- Pokušajte da vreme dobijeno bržim završavanjem nekog projekta iskoristite za tako što ćete rešiti neki deo tehničkog duga.
Da li je tehnički dug loša stvar?
Prost odgovor na ovo pitanje bi glasio: tehnički dug nije ni dobra, ni loša stvar, već je to samo dug koji se kad-tad pojavi u radu svakog developera. A baš kao i kada je u pitanju finansijski dug, sve se svodi na procenu developera da li je spreman da plaća dugoročnu kamatu kako bi dobio ono što mu treba što pre.
Mnogi developeri su danas pod velikim pritiskom da što pre razvijaju i šalju svoj proizvod na tržište. Upravo ta potreba za brzinom stavlja brojne development timove u situaciju da moraju da naprave ovaj tehnički dug kako ne bi bili prinuđeni da svoj proizvod lansiraju kasnije.
Zato većina smatra da tehnički dug u svojoj biti nije loša stvar. Zapravo, gotovo svi softverski proizvodi poseduju određeni stepen tehničkog duga.
Sa ovom tvrdnjom bi se svakako pre složili poslovno orjentisani kadrovi neke kompanije ili tima, ali ne nužno i pripadnici tehničkog tima koji mnogo bolje vide situaciju i svesni su svih troškova koji će neumitno uslediti kasnije.
Ključna stvar koja i dalje navodi mnoge da se rado okreću tehničkom dugu jeste činjenica da je on mnogo manje vidljiv nego finansijski, i samim tim je ljudima lakše da ga ignorišu.
Najvažnija je svakako svest o njegovom postojanju i odvajanje vremena da se on polako smanjuje, baš kao što biste to radili sa ratom finansijskog kredita. Uz samo malo dodatnog truda, možete da dodate novu vrednost projektu dok ga polako čistite, ili barem ostavljate čistijim nego što je bio pre vas.
3 komentara