Ohjelmistoremontti

Software repairment means a software development project where the goal is to repair, modify or expand old software without comprehensive initial information about its structure and operation. Typically, software repairs are performed by different people than those who originally developed the software. This requires the renovator to have an exceptionally good ability to understand the overall architecture and operation of the software quickly and accurately, and to create smart and functional solutions with the resources that are available.

The need for software repair can arise, for example, in the following ways:

1) Big hurry and small budget

Yritys kehittää ripeällä aikataululla ohjelmiston, jolla uusi liikeidea saadaan nopeasti markkinoille. Ohjelmistokehitys rahoitetaan pienehkön avustuksen tai sijoituksen avulla eli rajatulla budjetilla, mikä pakottaa tinkimään toiminnallisuudesta ja laadusta. Ohjelmisto otetaan kuitenkin lopulta käyttöön, mutta liiketoiminta ei lähdekään liikkeelle halutulla tahdilla, rahat loppuvat ja alkuperäiset koodarit kaikkoavat. Lopputuloksena on erittäin kiperä tilanne, missä ohjelmisto on jo tuotantokäytössä, mutta se ei ole vielä riittävä täysipainoiseen bisnekseen tai lisärahoituksen saamiseen, eikä yrityksellä ei ole kykyä kehittää sitä.

Tarvitaan ohjelmistoremontti, jossa ohjelmiston kipukohdat ja keskeiset puutteet ratkaistaan niin, että liiketoiminta pääsee taas kasvuun.

2) Little by little, piece by piece

Yritys on aikoinaan kehittänyt ohjelmiston ja saanut sen avulla liiketoimintansa mukavasti käyntiin. Vuosien varrella ohjelmistoon on tehty lukuisia uusia ominaisuuksia akuuttien asiakastarpeiden tyydyttämiseksi, mutta silloin tällöin on jouduttu “oikomaan mutkia” kehitystyössä, koska alkuperäinen design ei ihan tukenut uutta toiminnallisuutta. Pikkuhiljaa toteutus onkin pirstaloitunut ja monimutkaistunut, kunnes himmelistä ei ota enää mitään tolkkua eikä kukaan uskalla koskea siihen pitkällä tikullakaan. Pahimmassa tapauksessa kriittinen tieto-taito on ollut vain yksittäisten kehittäjien pääkopassa ja eräänä päivänä he eivät enää olekaan yrityksen palveluksessa.

Tarvitaan ohjelmistoremontti, jossa ohjelmiston arkkitehtuuri ja dokumentaatio tuodaan nykypäivän tasolle ja villit viritykset korvataan päivänvalon kestävillä ratkaisuilla.

3) The world and needs change

Yritys kehitti mainion ohjelmiston liiketoimintaansa tukemaan, mutta ympäröivä maailma ja tarpeet muuttuvat niin, että ohjelmistoa pitäisi laajentaa tavalla, jota ei alunperin osattu ottaa huomioon. Ohjelmiston ydinarkkitehtuuri ja tietomallit eivät yksinkertaisesti vain taivu uusiin tavoitteisiin, vaan niiden toteuttaminen on erittäin hankalaa. Vaatii suurta rohkeutta kajota ohjelmiston perustana oleviin rakenteisiin, koska pienikin muutos heijastuu joka puolelle koodia ja on iso riski rikkoa jotain olennaista.

Tarvitaan ohjelmistoremontti, missä arkkitehtuuria ja tietomalleja päivitetään niin, että ohjelmistoa voidaan taas jatkokehittää haluttuun suuntaan.

4) It was cheap

Yritys tilasi ohjelmiston halvalla ulkomailta. Ulkoistettujen kehitysprojektien perimmäinen ongelma on yleensä tilaajan toimittamissa spekseissä ja siinä, että tiettyjen halpatyövoimaa tarjoavien kultturien koodarit noudattavat niitä kirjaimellisesti. Suomalaiset koodarit uskaltavat yleensä kyseenalaistaa pöljät toimeksiannot, mutta esimerkiksi intialaiset saattavatkin tehdä kiltisti speksien mukaan ja lopputulos on sen mukaista. Jos olet speksannut vain ulospäin näkyvän toiminnallisuuden, mutta et sitä, miten se tulisi tehdä, ohjelmiston ylläpidettävyys voi olla huteralla pohjalla. Sitten kun jotain pitäisi myöhemmin muuttaa, paljastuu, että koodi on täynnä copy-pastea ja pienetkin päivitykset vaativat muutoksia joka puolelle.

Tarvitaan ohjelmistoremontti, missä lähdekoodissa toistuvat osuudet koostetaan yleiskäyttöisiksi moduuleiksi, jotta arkkitehtuuri selkeytyy ja jatkokehitys helpottuu, kun muutokset tarvitsee tehdä vain yhteen paikkaan.

5) The prototype slipped into production

Yritys kehitti nopean prototyypin ohjelmistosta voidakseen testata uutta liikeideaansa. Idea osoittautui niin lupaavaksi, että ohjelmisto päätettiinkin viedä saman tien tuotantokäyttöön. Kaikki meni hyvin, kunnes käyttäjämäärät ylittivät kriittisen pisteen, jonka jälkeen prototyypiksi tarkoitettu ratkaisu ei enää skaalautunutkaan, vaan ohjelmisto alkoi hidastua ja kaatuilla. Tämän seurauksena kehittäjätiimi joutui käyttämään kaiken työaikansa tulipalojen sammuttamiseen sen sijaan, että olisi pystynyt keskittymään ohjelmiston perimmäisten ongelmien ratkaisemiseen.

Tarvitaan ohjelmistoremontti, jossa etsitään ohjelmiston pullonkaulat eli selkeimmät skaalautumisen esteet ja korjataan ne, jotta akuutti kriisitilanne laukeaa. Samalla kannattaa remontoida myös ohjelmiston arkkitehtuuri, jonka pohjalta kehittäjätiimi voi luoda uuden ja skaalautuvamman version ohjelmistosta.

6) Selling before making it

Yritys myy vahvassa etukenossa ohjelmistotuotteita, joita ei oikeastaan ole vielä olemassa. Periaatteena on, että tuotekehitys laskutetaan asiakkaalta “käyttöönottoprojektin” tai “kustomoinnin” muodossa, jotta ei tarvitsisi investoida kehitystyöhön etukäteen. Jokaisen asiakkaan tarpeet ovat pikkaisen erilaisia ja toimitusajat haastavia, mikä ratkaistaan käytännössä niin, että koodipohjasta luodaan erillinen versio jokaiselle asiakkaalle, jota lähdetään muokkaamaan myytyjen speksien mukaiseksi. Toisin sanoen, yrityksellä ei oikeastaan ole yhtä ohjelmistotuotetta, vaan erillisiä asiakasprojekteja, joiden lähdekoodit ovat hämärästi sukua toisilleen, mutta erkaantuneet vuosien kuluessa omiksi rönsyikseen. Koskaan ei ole aikaa pysähtyä miettimään, että kuinka nuo rönsyt yhdistettäisiin yhtenäiseksi tuotteeksi, jota olisi helpompi ylläpitää ja jatkokehittää.

Tarvitaan ohjelmistoremontti, jossa tunnistetaan versioille yhtenäisiä ominaisuuksia ja ryhdytään pala kerallaan muokaamaan niitä uudelleenkäytettäviksi ohjelmistomoduuleiksi, kunnes koodipohja on yhtenäinen. Ominaisuudet, jotka ovat käytössä vain osalla asiakkaista, muokataan sellaisiksi, että ne voidaan kytkeä päälle/pois konfiguroimalla.

A familiar story – what would help?

Do any of these stories sound familiar? Did that happen to your company? Do not worry!

Softaremppa on ohjelmistoremonttien ammattilainen. Kutsu Reiska apuun, niin saat ohjelmistoosi uutta puhtia remontoimalla.