Tarina kehittäjästä, josta tuli yhdessä yössä kertaluokkaa tuottavampi

Jarno Leikas

CTO


Kun minua pyydettiin SoulCorelle (nyk. SC Software) pääarkkitehdiksi lokakuussa 2014, en meinannut pysyä tuolillani. Tiimi oli vanhastaan tuttu, ja olin ollut kiinnostunut sovellustuotannon automatisoinnista jo opiskeluajoistani lähtien. Olinkin siihen mennessä harmitellut, että automatisoitu sovellustuotanto oli aina ollut eräänlainen ”ikuinen lupaus”, joka ei koskaan oikein ollut realisoitunut. Nyt sain mahdollisuuden selvittää mihin asti ajatus lentää.

Ja lentäähän se. Pitkälle.

Mitä automatisoidulla sovellustuotannolla sitten tarkoitetaan?

Lyhyesti, automatisoimme sovelluskoodin tuotantoa, tavoitteenamme nostaa sovelluskehityksen tuottavuutta nykyisin käytössä olevia keinoja paremmalla tavalla.

Heti alkuun on tärkeää ymmärtää, että korkean tuottavuuden sovelluskehityksen lopputuloksena on aivan tavallinen järjestelmä. Siis sellainen, jonka olisi voinut koodata käsinkin (ei tosin läheskään samassa ajassa). Olennaisena erona on se, että meillä kerrosarkkitehtuurin eri kerrosten lähdekoodi syntyy automaattisesti sovellusmallin perusteella. Tästä saatava tehokkuuden lisäys on niin suuri, että sen kerrannaisvaikutukset koko projektin elinkaareen ovat jopa laadullisia, eivät pelkästään määrällisiä.

Korkean tuottavuuden kehityksessä ei siis ole ”mustana laatikkona” toimivaa monimutkaista ajoalustaa, tai toimialakohtaista valmislogiikkaa, jota pyritään parhaan mukaan taivuttamaan asiakastarpeisiin (eikä muuten näihin liittyviä lisenssimaksujakaan). Kuten tavanomaisessa web-pohjaisessa tietokantasovelluksessa, automaation avulla tuotettu sovellus tarvitsee ajoalustaksi tavanomaisen sovelluspalvelimen ja tietokantapalvelimen. Käyttäjät tarvitsevat päätteekseen esimerkiksi tabletin tai työpöytäselaimen. Mielestäni tämä on aika yksinkertainen juttu.

Myöskään generoidun sovelluksen integrointitarinassa ei ole magiaa: koska ratkaisu vastaa rakenteeltaan tavanomaista monikerrosarkkitehtuuria noudattavaa sovellusta, voidaan sitä vasten toteuttaa juuri ne integraatiot mitä tarvitaan – niillä tekniikoilla joita tarvitaan.

Miten korkean tuottavuuden sovelluskehitys eroaa muista menetelmistä?

Olen urani aikana toiminut sovelluskehityksessä useissa eri rooleissa ja monenlaisissa ympäristöissä: perinteisessä tuotekehityksessä, täysin räätälöidyissä projekteissa, sekä toteuttamassa ns. ”low-code” –ratkaisuja kolmannen osapuolen tuotteilla. Kaikille edellisille on olemassa paikkansa, mutta omat kokemukseni niistä eivät ole olleet täysin positiivisia:

  • Toimialakohtainen, perinteinen tuotekehitys ei läheskään aina lunasta sille asetettuja lupauksia, koska tuotteet ovat usein liian jäykkiä, tai niiden räätälöinti on kallista
  • Räätälöidyissä projekteissa, huolimatta ketteristä menetelmistä ja moderneista kehitystyökaluista, on edelleen liikaa käsityötä. Puhumattakaan perinteisten vesiputousprojektien ongelmista.
  • Kustannusongelmia on ratkottu ulkoistamalla työtä matalan kustannuksen maihin, mutta kokemukset kustannuksista ja lopputuloksesta eivät usein vastaa asiakkaan tavoitteita
  • Low-code –tyyppiset työkalut, joiden tavoitteena on ”helppo” sovelluskehitys, ovat yleensä ei-triviaaleissa toteutuksissa liian rajoittuneita ja/tai epäkäytännöllisiä. Usein todetaan, että homma olisikin ollut tehokkaampaa koodata käsin.

Korkean tuottavuuden kehittämisen parissa työskenneltyäni olen löytänyt mm. seuraavia etuja:

  • Mallinnusmenetelmässämme ei ole toimialakohtaisia toimintoja, joita on pakko yrittää taivuttaa puoliväkisin eri käyttötarkoituksiin sopivaksi
  • Korkean tuottavuuden kehitysalusta mahdollistaa sen, että ihmistyötä käytetään vain lisäarvon tuottamiseen, ei matalan jalostusasteen koodin tuottamiseen (me ulkoistamme tätä työtä siis tietokoneelle, emme meren taa)
  • Lisäarvoa asiakkaillemme koodaamme standardeilla ohjelmistokehitysvälineillä, joissa ei ole tyypillisiä low code –ratkaisuiden rajoitteita.

Malli on paitsi asiakkaillemme, myös meille hyvin innostava. On hieno tunne saada aikaan asiakkaalle näytettäviä ratkaisuja nopeasti, ja saada myös välitöntä palautetta toteutuksesta, koska voimme esitellä ratkaisua paljon entistä nopeammin. Minun onkin helppo yhtyä uusimman kehittäjämme spontaaniin kommenttiin: ”paluu vanhaan tapaan tuntuu aika vieraalta”.

Pilvi on kehittäjän ja käyttäjän paras ystävä

Olemme iloksemme huomanneet, että asiakkaamme ovat ottaneet käyttöön Microsoft Azure –pilvipalveluita, ja itsekin hyödynnämme niiden vaivattomuutta ja kustannustehokkuutta jatkuvasti. Omia suosikkejamme ovat SaaS-palveluiden, kuten Office 365, lisäksi Microsoft Azuren PaaS-palvelut, jotka ovat yksinkertaisia ja nopeita ottaa käyttöön. Samalla ne ovat tarvittaessa skaalautuvia ja varmistettuja.

Vaikka itse työskentelemmekin päät ja jalat pilvissä, ratkaisumme toimivat yhtä lailla paikalisillakin palvelimilla. Esimerkiksi Microsoft-pohjaisessa toteutuksessa paikallinen IIS-palvelin ja Microsoft SQL Server –palvelin ovat ihan yhtä tuettuja, kuin Azure Web Application ja Azure SQL.

Miksi kaikki eivät tee näin?

Totta puhuen, en oikein ymmärrä miksi; nimittäin meillä kuulee usein lauseen ”eikös tänkin voisi generoida” – ja hyvin usein vastaus on myönteinen. On toki selvää, että räätälintyölle ja valmistuotteille on paikkansa – kaikkea kun ei kannata automatisoida. Toisinaan on tehokkainta koodata, mutta mielestämme olennaista on, ettei koodaajan tarvitsee toteuttaa sellaista koodia, jonka voi jättää koneelle. Järki siis mukana kaikessa.

Kaiken kaikkiaan, kokemusteni perusteella alamme tulevaisuus on korkean tuottavuuden ohjelmistotuotannossa. Onneksi se on meillä jo nyt arkipäivää.