Tehnički dug - neželjeni cimer u životu svakog start up-a

cityexpert Cityexpert

Čestitamo! Vaš startup je upravo dobio investiciju, imate MVP koji funkcioniše i vaš proizvod polako postaje popularan. Sledeća stvar koju očekujete jeste da vaše poslovanje pređe na viši nivo, da skalira i da se proširi. Ali, ovo zahteva velike promene u celoj kompaniji, što sigurno povlači i velike promene u vašem kodu. Međutim, jedna stvar koja će vas usporiti u celom ovom procesu je tehnički dug. U ovom tekstu ću sa vama podeliti ključne pristupe i primere najbolje prakse koje smo naučili u City Expert-u.

Da li možete da izbegnete tehnički dug?

Svi smo čuli priče o propalim start up-ovima koji su nagomilali toliko mnogo tehničkog duga da im se ceo sistem urušio i nikada se nije oporavio. Prirodno je da pomislite da se to vama nikada neće desiti. Verovatno ćete pomisliti da ćete vi donositi bolje odluke kada je reč o arhitekturi sajta i postavljanju dobrih temelja za buduće nadograđivanje i da ćete imati vremena za postavljanje čvrstih temelja.

Takvo razmišljanje je, nažalost, veoma naivno. Prvo, nećete moći da predvidite sve buduće zahteve. Čak i da imate potpuni uvid u sve buduće zahteve, pre ili kasnije će doći do nekih nepredvidivih zahteva i vaša arhitektura od pre par godina će se vratiti da vas uhodi.

Drugo, nikada zapravo nećete imati dovoljno vremena. Kada revidirate vašu viziju, krenućete da nabacujete tehnologije i kodove čisto da biste imali realizovan koncept koji radi, kako biste imali šta da validirate. Ako vidite potencijal, onda ćete želeti da potražite investicije. Do trenutka kada dobijete prvu investiciju biće prekasno da menjate nešto, jer će vam skalabilnost biti veći prioritet.

Kako da se nosite sa stvaranjem tehničkog duga?

Brz napredak nije rešenje, zato što stvara neverovatno mnogo tehničkog duga. Ali, sporo napredovanje nije rešenje, jer će se razvoj vašeg proizvoda pretvoriti u pravi pakao. Rešenje koje ja predlažem jeste da se napravi kompromis uz obećanje da se taj kompromis nikada neće zaboraviti.

Kompromis se sastoji iz sledeceg - za svaku losu arhitekturalnu odluku koju donesete, za sledecu koja vam se namece ne smete je implementirati. Za sve ono za šta pravite kompromis, napišite jasne komentare u kodu (ako je moguće) i obavežite se da ih rešite u budućnosti, tako što ćete isplanirati i vreme da ih rešite. Ovo će smanjiti količinu tehničkog duga koja se nalazi u projektu.

Kada ćete morati da otplatite dug?

Popravke tehničkog duga imaju tendenciju da se vrlo lako i vrlo često odlažu. Najčešće opravdanje za to je činjenica da smo i do sada funckionisali sa trenutnim kodom, pa da možemo i narednih nekoliko meseci da funkcionišemo sasvim dobro. I dok trepnete, privremeni kod postaje trajno rešenje. Pa, kako se nositi sa ovim?

  • Prvo pravilo je ste da budete razumni. Neki privremeni kodovi će postati trajni, zato što je neki preči zadatak jednostavno iskočio i tu ništa ne možete da uradite.

  • Drugo pravilo – iskoristite tehnički dug kao kec u rukavu. Dobićete zahtev koji ćete morati da rešite u veoma kratkom roku i tada ćete jednostavno predložiti, da nakon ispunjenja tog zahteva sledi popravka štete koju je prethnodni urgenti zahtev doneo. Jedna šteta dođe, prethodna se popravi i nivo tehničkog duga ostaje isti.

Da li bilo koji deo projekta može da bude preusmeren ka tehničkom dugu?

Postoji jedno mesto gde nikada ne bi trebalo da se poigravate sa tehničkim dugom, a to je postavljanje infrastrukture. Ovo uključuje postavljanje framework-a i biblioteka koje koristite, build and deploy pipeline, infrastrukture za testiranje, stistema za prikupljanje telemetrije i postavljanje infrastrukture za skladištenja podataka.

Ovde sam naveo šta je nama u City Expert-u neophodno, ali u zavisnosti od toga kakav je vaš start up, vaša infrastruktura će možda biti drugačija. Da ne bih sada išao u detalje zašto je svaki od ovih delova infrastrukture neophodan, samo ću reći sledeće – kada ovi elementi rade besprekorno, vreme koje je portebno da se poprave bug-ovi je znatno manje. Takođe, smanjena je i potencijalna šteta koju može da donese neki budući tehnički dug. I na kraju, postavljanjem dobre infrastrukture, zaštitili ste se od bespovratnog gubitka podataka i omogućili sebi da samopouzdano nastavite sa svojim projektom.

Stefan Pekić
Chief Technical Officer