Technical debt

Marcus Olsson,

Technical debt – eller "tekniskt skuld" är ofta följden av ett snabbt resultat framför bra skriven kod. Kod som med stor sannolikhet kanske kommer att behöva refaktoreras, förenklas och skrivas rent längre fram.

Denna skulden kostar ofta "ränta", där framtida funktioner och kod kräver allt längre, mer komplicerad och därmed ofta kostsammare utveckling.

Allt detta är ett aktuellt problem i ett projekt jag har varit involverad i över fem år – en gigantisk monolit där vi månadsvis pushar ut flertalet nya funktioner och ändringar.

I detta projektet har alltid snabbhet och låg kostnad varit prioriterad framför kvalité – Mark Zuckerbergs och Facebooks gamla motto "move fast and break things" helt enkelt. Och detta har tjänat oss väl, från dussintalet användare har projektet skalats upp till över hundratals kunder och nästan 10 000 unika sessioner varje dag. Därtill tillkommer databehandling, xls-exporter, diverse utskick via mail och SMS och ett överflöd av andra funktioner.

Men knakar i fogarna – det gör det. Undantag på undantag har byggts upp, uträkningsfunktioner är inte modulära utan duplicerade med små skillnader för att passa just sitt specialfall – en mindre ändring som en ändrad konstant behövs ofta replikeras på flera platser i systemet. Uppdateringar av externa paket blir svårare och svårare då egna API:er och lager har byggts ut på gammal kodbas.

DRY är verkligen inte en princip som har varit med i beräkningarna.

Allt detta låter såklart som många programmerares mardröm – och det är inte ett arbetssätt att rekommendera i de flesta fallen. Men faktum är detta har varit helt okej för oss fram tills nu – vi vet vad vi gav oss in i. Varje timma lagd på utvecklingen har haft en ROI mångdubbelt så mycket större, med alla sina nöjda användare och kunder sitt stundtals buggiga gränssnitt till trots.

Men räntan börjar bli dyr; det är svårt att uppskatta utvecklingstider och buggar dyker upp där man minst anar dem.

Återbetalning och amortering

Men nu då – hur ska vi återbetala skulden? Antingen betalar vi tillbaka till fullo – tar med oss våra lärdomar och bygger om allt från grunden "rätt". Eller så börjar vi sakta och säkert amortera av vår skuld genom att refaktorera modul för modul sakta med säkert.

Eller så fortsätter vi att bygga på vår monolit, med vetskapen att den hålls ihop med silvertejp och obskyra paket som inte uppdaterats sedan 2020 – och fortsätter betala ränta ad infinitum.

Snabbhet, pris, kvalité – man kan alltid bara välja två.