517 milliárd dollár. Ritkán látunk ekkora összeget, ezért leírom számjegyekkel is: $517 000 000 000. Az ott 9 darab 0-ás. Ekkora volt a CISQ (Consortium for IT Software Quality) szerint1 a technikai adóssága az USA-nak, 2018-ban.
A fentiek alapján nyugodtan megállapíthatjuk, hogy a technikai adósság drága mulatság. Ugyanakkor fontos is, a technológiai ipar nagyon sokat foglalkozik a témával. Sőt, már mi is érintettük párszor a blogunkon (pl. itt vagy itt). Ennek ellenére az iparágon kívül kevesen tudják mi is az a technikai adósság. Ez a cikk nekik szól.
Valaki adósának lenni nem jó érzés. Minél inkább eladósodunk, annál nagyobb rajtunk a nyomás. Ha beszéltél már valakivel, akinek sikerült törlesztenie az adósságát, akkor nagy valószínűséggel felszabadító érzésként élte ezt meg.
A technikai adósság nagyon hasonlít ebben a pénzügyi adósságra. Ugyanúgy mint a pénzügyi adósság esetében, a technikai adósság esetében is kamatot kell fizetnünk. Ez a kamat több formát is felvehet: magas karbantartási, support vagy jogi költségek, régi rendszerek lecserélésének költsége vagy a motiválatlan munkaerő.
Ha nem fizetjük vissza az adósságunkat mielőtt újabb fejlesztéseket végeznénk, folyamatosan akadályokba fogunk ütközni és újabb "kölcsönöket" kell majd felvegyünk. Minél több az adósságot halmozunk fel, annál lassabban tudunk majd előre haladni, míg végül teljesen meg nem fojtja a fejlesztési törekvéseinket.
Ezt a jelenséget nevezzük szoftver entrópiának. A termodinamika második törvénye azt mondja, hogy egy zárt rendszer rendezetlensége nem csökkenhet, csak szintben maradhat vagy növekedhet. Ennek a rendezetlenségnek a mértéke az entrópia. Ivar Jacobson2 szerint egy szoftveres rendszer is hasonlóan viselkedik: ha folyamatos karbantartás és beavatkozás nélkül módosítunk egy szoftvert, annak növekedni fog a rendezetlensége, vagyis an entrópiája.
Egy jó példa lehet erre egy ERP rendszer. Egy ilyen rendszer a folyamatosan változó üzleti igények miatt folyamatosan módosul. Ha nincs a dokumentáció frissítve, nincs a forráskód karbantartva vagy nincsenek elvégezve a kötelező technológiai frissítések, akkor bekerülünk abba az ördögi körbe, hogy a rendszert továbbfejleszteni sem lehet már, mert akkora költséggel járna. Ilyenkor nem marad más opciónk mint a "kukázni és cserélni" módszerhez folyamodni.
A technikai adósság egy előremutató mérőszám, amely segítségével számszerűsíthető azoknak a döntéseknek a hatása, amikor egy gyorsabb vagy olcsóbb megoldást választottuk egy rendszer bevezetésénél vagy karbantartásánál.
Képzeljük el a meglévő IT rendszereinket… most pedig képzeljük el, hogy néznének ki azok a rendszerek, ha most kezdenénk el 0-ról felépíteni egy ideális rendszert. Mennyibe kerülne nekünk a meglévő rendszereinket úgy átalakítani, hogy az ideális rendszerhez jussunk? Ez a költség a technikai adósság.
A technikai adósság felhalmozásához általában egy kompromisszumos döntés meghozatala vezet. Ez a kompromisszum fakadhat időhiány vagy költségcsökkentés miatt.
Ilyen döntés lehet például:
A technikai adósság elkerülhetetlen. A szoftver és hardver is rohamtempóban fejlődik, naponta új funkcionális és biztonsági frissítések jelennek meg, ezért már csak pusztán az idő elteltével nő a technikai adósságunk.
A technikai adósság eredendően része a szoftvereknek. Az adósság csökkentése viszont nem igazán számszerűsíthető, ezért az IT-nak nehéz feladata van, amikor be kell mutassa a vezetőségnek, hogy miért szükséges mégis erre erőforrásokat fordítani.
A legkönnyebb talán az, ha megnézzük milyen feladatok tartoznak egy szoftver karbantartásához és üzemeltetéséhez. Herb Krasner, a CISQ jelentés szerzője 4 típusú karbantartást különböztet meg.
Egy új szoftver verzió élesítése utáni hibák elhárítása. A technikai adósság nagyban hozzájárul a korrektív karbantartás szükségességéhez: minél nagyobb az adósságunk, annál nehezebben átlátható és karbantartható a kód, ami újabb hibákhoz vezet.
A karbantartási költségeknek körülbelül 20%-át képezik a korrektív karbantartási feladatok.
Az adaptív karbantartás a változó igények miatt szükséges módosításokhoz kapcsolódik. Hasonlóan a korrektív karbantartáshoz, a technikai adósság jelentősen befolyásolja mennyire könnyű az adaptív módosításokat végrehajtani.
Az adaptív karbantartás teszi ki a karbantartási költségek mintegy 50%-át.
A hibák elhárításán és a változó igények miatti módosításokon kívül, sok erőforrást igényel egy szoftver tökéletesítése, a használhatóság és teljesítmény javítása. A technikai adósság, korrektív és az adaptív karbantartáshoz hasonlóan befolyásolja azt, hogy mennyire könnyű ezeket a továbbfejlesztéseket megejteni.
A perfektív karbantartás költségei 25%-át képezik a karbantartási összeköltségnek.
Preventív karbantartásnak nevezzük az alvó hibák felderítését és javítását, még mielőtt ezek effektív hibákká válnának. Ilyen feladat például a szoftverfrissítés, a biztonsági frissítés vagy a refaktorálás is, de ide sorolhatjuk akár a dokumentáció naprakészen tartását is.
A preventív karbantartás csupán 5%-át teszi ki a teljes karbantartási költségnek, de ha elhanyagoljuk, akkor jelentősen megnövelheti a korrektív, az adaptív és a perfektív karbantartások idejét és költségét. Ez látható az alábbi grafikonon.
A fenti direkt költségnövekedésen a technikai adósságnak egyéb, közvetett hatásai is vannak, mint például:
Azt már megállapítottuk, hogy a technikai adósságtól nem lehet teljesen megszabadulni. Ellenben van pár olyan módszer amit a fejlesztő csapatok alkalmazhatnak, hogy jobb legyen a kód minősége és ezáltal redukálják a technikai adósság növekedési ritmusát:
Ha már felgyűlt az adósságunk, akkor fontos kérdés az, hogy miként menedzseljük. A technikai adósság menedzselésére is van módszer:
Vannak olyan (ritka) esetek is amikor nem érdemes a technikai adóssággal. Ilyen lehet például, hogy egy termék kivezetés alatt áll, vagy ha a termék csak egy prototípus vagy MVP aminek a célja csupán egy ötlet vagy célpiac validálása.
A technikai adósság elkerülhetetlen, minden IT projekt kötelező velejárója. Nem tudomást venni róla, vagy folyamatosan halasztgatni a közbeavatkozást előbb vagy utóbb megbénítja a rendszert és egyúttal a vállalkozást is.
Éppen ezért a jó fejlesztő csapatok nem halmozzák fel a technikai adósságot, hanem időben menedzselik ezt. A szoftvereket és dokumentációt folyamatosan frissítik, biztosítják a kód minőségét automata tesztek és code review-k segítségével és a továbbfejlesztések mellett folyamatosan időt szakítanak a kódbázis refaktorálására is.