Ohjelmistokehityksen nopeutuminen, kilpailun sekä vaatimusten koventuminen ovat herättäneet yrityselämän kiinnostuksen teknistä velkaa kohtaan. Teknisen velan värittämää softaa ei kehitetä nopeasti, ei vaikka oltaisiin kuinka ketteriä. Teknisen velan määrää tai sen hintaa nykyisissä ohjelmistoissa ei tiedä kukaan. Gartner ennusti globaalin IT-velan nousevan triljoonaan dollariin vuoden 2015 aikana. Määrä on yli kymmenkertainen verrattuna esimerkiksi globaaliin tietoturvaan käytettyyn rahaan. Teknisen velan vaikutukset ulottuvat ohjelmistotuotantoyrityksistä ja ohjelmistojen käyttäjistä koko ympäröivään maailmaan.
Tekninen velka – mitä se on?
Teknisen velan esitteli Ward Cunninghamin vuonna 1992, jolloin sen määritteenä oli hätäisesti tehty koodi. Nykyisin teknisen velan määritelmä kattaa lähes kaiken ohjelmistotuotantoon kuuluvan. Yleistäen voidaan sanoa, että tekninen velka on jokin ohjelmistossa oleva tai siihen liittyvä asia, joka haittaa sujuvaa ohjelmiston jatkokehitystä tai sen ylläpitoa. Yhtenä esimerkkinä teknisestä velasta on puutteellisesti ja oikein tehdyn koodin erotus. Tuo erotus on eräänlainen velka, joka on maksettava takaisin eli puutteellisesti tehty koodi on jossain vaiheessa korjattava. Velalle alkaa myös kasvaa korkoa. Tämä on se lisätyö, jonka puutteellisesti tehdyn koodin ylläpito vaatii. Mitä myöhemmin koodin korjaaminen tehdään, sitä kalliimpaa ja hankalampaa se on. Tekninen velka ei ole mikään uusia asia, vaikka termi ei itsessään kovin vanha olekaan. Hankalaa koodia, huonoja arkkitehtuuriratkaisuja tai tekemättömiä testejä on ollut aina. Nyt sille on termi ja määrittely. Teknisen velan määritelmien tarkoituksena on aikaansaada yhteinen ymmärrys ja kieli, jota erilaisen taustan omaavat henkilöt voivat käyttää tehdessään päätöksiä teknisen velan suhteen.
Tekninen velka – miten se syntyy?
Tekninen velka voidaan jakaa kahteen perustyyppiin (Kuva 1); tahattomaan tekniseen velkaan (tyyppi I) ja nykytilannetta optimoivaan tekniseen velkaan (tyyppi II). Tyypin I tekninen velka on tahaton. Syitä tähän ovat esimerkiksi puuttuvat koodausstandardit. Tyypin II tekninen velka optimoi nykytilannetta, ja on joko lyhyen tai pitkän tähtäimen velkaa. Tyypillistä tälle velalle on, että sillä halutaan ratkaista nopeasti nykytilanteen ongelmat (esim. aikataulu, budjetti), jättämällä tekemättä jotain tai valitsemalla helpoin tai osittainen ratkaisu. Näin tekemättömät tai osittaiset ratkaisut jäävät odottamaan korjausta. Pitkän tähtäimen tekninen velka syntyy ennakoivasti, strategisista syistä. Näitä ovat muun muassa vähentynyt asiakastyytyväisyys ja monimutkainen koodi. Lyhyen tähtäimen tekninen velka syntyy usein taktisin perustein, ja siinä käytetyt oikotiet, esim. puuttuvat testit, osittaiset toiminnallisuudet tai kevyempi tietokanta, ovat jokainen erikseen tunnistettavissa. Taktiseen velkaan johtavia syitä voivat olla esimerkiksi time-to-market syyt. Lyhyen tähtäimen, paljon pieniä oikoteitä sisältävä tekninen velka syntyy ajanpuutteen ja liiketoimintapäätösten seurauksena ja on luonteeltaan inkrementaalista (esim. ”copy-paste koodi”).
Teknistä velkaa syntyy lukuisista eri syistä ja usein monen eri syyn yhteisvaikutuksesta. Teknistä velkaa syntyy kaikilla organisaatiotasoilla, eikä se rajoitu vain koodiin tai arkkitehtuuriin. Voidaan sanoa, että teknistä velkaa ovat kaikki ne järjestelmään liittyvät asiat, jotka heikentävät, huonontavat tai estävät järjestelmän kehittämistä ja ylläpitoa.
Tekninen velka – kustannukset
Kuten ”velka” sanasta voi päätellä, teknistä velkaa voi verrata rahoitusvelkaan. Mutkien suoristaminen ja oikoteiden käyttö on kuin ottaisi velkaa; lainataan aikaa, jotta saavutetaan tavoitteet. Velka pitää kuitenkin maksaa, eli korjata suoristetut mutkat ja poistaa oikotiet. Velkaan liittyy myös korko; velalle alkaa kasvaa korkoa, ja mitä kauemmin velkaa pidetään, sitä suurempi on koron osuus. Korko on sitä ylimääräistä työtä, aikaa, tai rahaa, mitkä vaaditaan, että ohjelmistoa voidaan ylläpitää ja kehittää (Kuva 2, seur. sivu). Tämä työ hankaloituu sitä enemmän mitä kauemmin korjausta odotetaan. Ajan myötä niin korolla kuin velallakin on tapana kasvaa, jolloin myös ylläpitokustannukset nousevat.
Vaikka teknistä velkaa ei tarvitse maksaa takaisin millään tietyllä aikataululla, yleensä se pitää kuitenkin maksaa. Teknisen velan maksaminen voidaan jakaa kolmeen vaihtoehtoon: koodin uudelleen kirjoitus, teknisen velan muuntaminen pienemmäksi ja koron maksun jatkaminen. Teknistä velkaa ei tarvitse maksaa takaisin, kun kyseessä on velka, joka poistuu tuotteen elinkaaren lopussa. Tässä tapauksessa tuotteen elinkaari on lyhyt tai velan kustannukset ja korko ovat sellaisella tasolla, jotka voidaan hyväksyä. Teknisen velan vaikutukset kustannuspuolella ovat kasvaneet runsaasti, eivätkä ne näytä laskevan. Tärkeää on ymmärtää se, että teknisen velan huomioimatta jättämisellä on hyvinkin radikaaleja vaikutuksia, tappiollisten projektien lisäksi se voi johtaa jopa konkurssiin.
Tekninen velka – ongelma vai mahdollisuus
Tekninen velka nähdään usein vain ongelmana, mutta se voi olla myös mahdollisuus, kilpailuetu. Joskus voi olla tarpeen olla ensimmäisenä markkinoilla ja/tai hankkia lisätietoa ja kokemuksia toteutettavasta tuotteesta. Tällöin teknisen velan täytyy olla harkittu ja hyvin suunniteltu. Velan kustannukset sekä se, kuinka velka tullaan maksamaan takaisin, pitää olla hyvin tiedossa. Teknistä velkaa voidaan käyttää myös strategisena, taktisena tai arvonluonnin välineenä organisaation lyhyen ja pitkän tähtäimen suunnittelussa. Vain asianmukaisesti hallinnoidulla velalla voidaan saavuttaa tuloksia, sillä hallinnoimaton velka voi johtaa mittaviin tappioihin. Ongelmallisinta on tekninen velka, joka on piilossa, rakenteellista tai teknologiaan liittyvää. Toinen iso ongelma tekniseen velkaan liittyen on kommunikointi. Niiden, jotka eivät työskentele teknisen velan parissa on vaikea ymmärtää ”näkymättömiä” ongelmia. Teknisen velan määritelmä on hyvä apuväline tähän keskusteluun, koska sen käsitteistö on lähellä talouspuolen käsitteistöä. Näin myös ei-teknisten ihmisten on helpompi ymmärtää velan merkitys ja se, miksi koron ja velan kasvua täytyy seurata ja maksaa.
Tekninen velan hallinnointi – turvaa tuleva kehitys ja kilpailukyky
Ohjelmistojen ja tuotteiden erilaiset elinkaaret vaikuttavat siihen, millainen merkitys teknisellä velalla ja sen hallinnoinnilla on. Jotta teknisen velan hallinnointi on mahdollista, on tärkeää tietää miten, milloin ja miksi teknistä velkaa syntyy. Teknisen velan hallinnointi vaatii myös tunnustamista, tunnistamista ja rajoittamista. Tunnusta: teknisestä velasta vapaata ohjelmistoa ei ole. Tunnista: missä ja millaista teknistä velkaa ohjelmistossa on. Rajoita: estä tahattoman tai suunnittelemattoman teknisen velan syntyminen. Hallinnoinnin tehtävänä on hoitaa, seurata ja kommunikoida teknisen velan hinnan muodostumista, priorisointia, takaisinmaksua ja koron kasvua. Hallinnointi antaa ajantasaista tietoa teknisen velan vaikutuksista niin ylläpidettävyyteen kuin ohjelmiston koko elinkaareenkin. Teknisen velan hallinnointiin vaikuttaa myös organisaation liiketoiminnalliset tavoitteet ja kilpailutilanne, jotka näyttäytyvät tärkeässä roolissa priorisoitaessa teknisiä velkoja. Hyvin hallinnoidulla teknisellä velalla voidaan myös saavuttaa taloudellista hyötyä tai ratkaisevaa etua markkinoille tuloajassa. Hyvä teknisen velan hallinnointi vaatii erityisesti jatkuvaa kommunikointia ja täsmällistä dokumentointia. Onnistuneeseen kommunikointiin vaikuttavat niin organisaation viestintärakenteet, teknisen velan näkyvyys ja vaikutukset kuin sidosryhmien tietotarpeiden ymmärtäminenkin. Teknisen velan hallinnointi ei ole kertaluonteinen ponnistus, vaan osa jokapäiväistä tekemistä. Yhteinen politiikka, ohjeistukset, työvälineet ja hallinnoinnin integrointi normaaliin ohjelmistokehitystyöhön auttavat liikkeelle. Erilaisia työkaluja ja välineitä löytyy niin teknisen velan tunnistamiseen kuin hallinnointiinkin. Se mitä välineitä tai työkaluja käytetään, ei ole ratkaisevaa. Olennaista on, että tekninen velka esitetään täsmällisesti, sen kustannukset ja hyödyt kommunikoidaan kaikille sidosryhmille ja hallinnoidaan tekniset velat ja niiden seuraukset. Teknistä velkaa hallinnoimalla varmistetaan yrityksen mahdollisuus menestykseen myös tulevaisuudessa.
Lähteet
- Cunningham, W. (1992). The WyCash portfolio management system. Teoksessa Addendum to the Proceedings on Object-Oriented Programming Systems, Languages, and Applications (Addendum), Vancouver, British Columbia, Canada (29-30). New York, NY, USA: ACM
- Lehojärvi, J. (2016). Tekninen velka hallinnoinnin näkökulmasta: tunnusta, tunnista ja rajoita. http://urn.fi/URN:NBN:fi:jyu-201603111821
- McConnell, Steve (2007, 1. marraskuuta). Technical Debt. 10x Software Development. http://www.construx.com/10x_Software_Development/Technical_Debt/.
- Nugroho, A., Visser, J. & Kuipers, T. (2011). An empirical model of technical debt and interest. Teoksessa Proceedings of the 2Nd Workshop on Managing Technical Debt, Waikiki, Honolulu, HI, USA (1-8). New York, NY, USA: ACM.
- Stamford, Conn. (2010). Gartner Estimates Global ’IT Debt’ to Be $500 Billion This Year, with Potential to Grow to $1 Trillion by 2015. Gartner. http://www.gartner.com/newsroom/id/1439513.
- Tom, E., Aurum, A. & Vidgen, R. (2013). An exploration of technical debt. Journal of Systems and Software, 86(6), 1498-1516.
- Yli Yli-Huumo, J., Maglyas, A. & Smolander, K. (2014). The sources and approaches to management of technical debt: A case study of two product lines in a middle-size finnish software company. Teoksessa A. Jedlitschka, P. Kuvaja, M. Kuhrmann, T. Männistö, J. Münch & M. Raatikainen (toim.), Lecture Notes in Computer Science (s. 93-107) Springer International Publishing.
Jaana Lehojärvi on Jyväskylän yliopiston tietojärjestelmätieteen opiskelija, jolla on pitkä ura ohjelmistokehityksessä. Kiinnostunut mm. teknisestä velasta, josta kirjoittanut kandidaatin tutkielman ja työstää pro gradua. Jaanan kandidaatintutkielma valittiin Sytyke ry:n Vaikuttavimmaksi opinnäytetyöksi 2015-2016.