Tekisin ite paremman

Tämän päivän mietelauseeni on “Tekisin ite paremman.” Uskon, että lause tuo muillekin mieleen muistoja työuran varrelta. Joskus ajatus on ollut oikeasti totta. Joskus taas on lähdetty tekemään itse ja sitten puolivälissä projektia herätty siihen, että on raskaasti aliarvioitu ongelman mutkikkuus.

Mielellään haluaisin kannustaa kaikkia toteuttamaan unelmansa ja aloittamaan tekemisen heti. Ketteryysajattelukin tuntuu kehottavan siihen, että tekee ensin jotain pientä jota sitten kasvattaa. On kuitenkin asioita, joita ei voi jälkikäteen lisätä rakennelmaan helposti ellei niitä ole jo alunperin ajateltu. On olemassa esimerkiksi arkkitehtuurin periaatteita ja matemaattisia totuuksia, jotka eivät rasita pientä projektia. Niiden taakka kasvaa kuitenkin eksponentiaalisesti kun projektin koko kasvaa. Kotikutoinen skripti ei välttämättä ole skaalattavissa miljoonalle käyttäjälle, tai vaikka eksatavun kokoisen datavaraston selaamiseen.

Omakohtaisia kokemuksia tämän kanssa painimisesta minulla on esimerkiksi Ansiblesta, jolla olen kirjoittanut hiukan mutkikkaampia asennusautomaatioita. Siinä vaiheessa kun haluan tehdä loopin, alan yleensä muistella suomalaiskansallisia voimasanoja. Alunperin todella näppärän ja ymmärrettävän näköinen YAML-kuvaus ei pärjää mitenkään oikeiden ohjelmointikielien kontrollirakenteille. Olen pohtinut, että olisiko mahdollisesti kannattanut kuitenkin tehdä kontrollirakenteet vaikka Pythonilla tai vastaavalla. Sieltä voisi sitten kutsua asennuksen palasia. Silloin voisi koko sielunsa kyllyydestä loopata ja iffitellä kätevällä ja selkeällä formaatilla. 

Voi tietysti sanoa, että ei Ansiblea ole tarkoitettu tuollaiseen. Kuitenkin ohjelmointikielissä on se, että niillä voi tehdä määrättömän mutkikkaita asioita, jos vaan pitää pään kylmänä ja noudattaa hyviä arkkitehtuuriohjeita. Voisi siis myös sanoa, että älkää herran tähden ruvetko kirjoittamaan uutta ohjelmointikieltä. 

Vastaava näkökulman kapeus voi paljastua, kun halutaan tehdä jotakin huolellisesti ja ennustettavasti. Jotakin voi osata tehdä yhden kerran, mutta entä sitten kun halutaan varmistaa että se osataan tehdä jatkossakin. Tai että muutkin osaavat tehdä ja voidaan osoittaa että tehtävä ylipäätään on tehty tai sen tehokkuutta osataan arvioida ja niin edelleen. CMMI-mallissa ansiokkaasti kuvatut ”institutionalisaation” piirteet ja niiden tärkeys eivät avaudu ihan hetkessä. 

Toisaalta on myös niitä hetkiä, jolloin ”institutionalisaatio” menee liian pitkälle. On olemassa järjestelmiä ja ratkaisuja, joita tilaavat ihmiset jotka eivät maksa niitä omilla rahoillaan. He eivät myöskään joudu koskaan itse niitä käyttämään. Usein kalleimmat hankkeet ovat valitettavasti juuri näitä. Uskon, että monesti parempi ratkaisu olisi ”tehdä ite parempi”. Vaihtoehtoisesti voisi tilata moderneja, modulaarisia osia pienemmiltä toimijoilta institutionalisoituneiden vakiotoimittajien tekemien valtavien möhkäleiden sijasta. Usein kokemukseni mukaan optimaalinen ratkaisu on vakiopalasista ja avoimesta lähdekoodista kevyellä kustomoinnilla koottu mosaiikki.