Blogi

Liiketoiminta ∪ ohjelmointi

panuleppaniemi Bisnes Teknologia

Näppäimistö

Ajatusleikki: mitä jos nykyisiä ohjelmointikieliä ja ohjelmointimalleja ei enää huomenna olisikaan olemassa? Asiakkaan liiketoiminta on kuitenkin digitalisoitava. Mistä lähtisimme liikkeelle? Minkälaisia rakennuspalikoita haluaisimme? Kaipaisimmeko “edesmenneitä” tapoja vai osaisimmeko ajatella ihan uudesta perspektiivistä?

Vaikka monet ohjelmointikielet ja -teoriat ovatkin rakennettu vuosikymmeniä sitten, on alamme silti suhteellisen nuori. Miten maailma on muuttunut parin vuosikymmenen aikana? Mitä olemme sinä aikana oppineet tietokoneista, ohjelmistoista, ja verkoista? Miten edellämainitut ovat muovanneet ihmisten käyttäytymistä? Vaikuttaisivatko nämä muutokset ja käytännön kokemukset perustavanlaatuisesti siihen miten ajattelemme ohjelmistoja rakennettavan?

Yleensä ohjelmakoodi nähdään täysin erillisenä, irtonaisena osana liiketoiminnasta. “Koodarit koodaa”. Kuitenkin yhä useamman yrityksen liiketoiminta saattaa nojata kokonaan ohjelmistoihin. Monelle on silti mysteeri, mitä konepellin alla tapahtuu.

Tietotyö koetaan usein näkymättömäksi. Pienet, mutta kriittiset liiketoiminnalliset yksityiskohdat hukkuvat helposti koodin kiekuroihin. Ei ole varmaa tietoa siitä, miten jokin palvelun osa-alue, logiikka tai järjestelmien välinen riippuvuus toimii. On turhauttavaa leikkiä arkeologia, ja valitettavasti suurennuslasia tarvitaan joskus tuoreenkin koodin kanssa. Oireita saatetaan yrittää hoitaa esimerkiksi dokumentaatiolla, mutta ongelma on, että se on vain näkemys siitä mitä oikeasti tapahtuu.

Ohjelmointikielet ovat siinä mielessä erikoisia, että niillä puhutaan samaan aikaan niin tietokoneille kuin ihmisille. Koodilla yritetään mallintaa asiakkaan liiketoimintaa. Liiketoimintalogiikan seassa joudutaan käsittelemään tietokoneen muistipaikkoja ja mallintamaan erilaisia tietorakenteita. On olemassa hyödyllisiä sääntöjä ja malleja (esim. SOLID, DDD) ohjelmoinnin tueksi, jotka helpottavat sovelluksen arkkitehtuurin rakentamista ja tulevien muutosten toteuttamista, mutta toisaalta “itsedokumentoiva ja liiketoimintaa mallintava” koodi kuorrutetaan asioilla, joilla ei ole mitään tekemistä reaalimaailman kanssa. Teknologiat ovat tietysti kehittyneet ja ohjelmointi on yksinkertaistunut, mutta emme kai ole saavuttaneet lakipistettä tavassa tehdä asioita?

Edellisistä ajatuksista taitaa selvitä, etten ole täysin tyytyväinen nykytilanteeseen. Mitä sitten haluaisin muuttaa? Mitä toivon tulevaisuudelta?

Haluaisin tuoda ohjelmistokoodin projektin kaikkien sidosryhmien nähtäville. Lisäksi se olisi sellaisessa muodossa (joka voi olla muutakin kuin koodia), että tuoteomistaja voi hahmottaa sitä omatoimisestikin. Riittää, että se on korkealla tasolla: minkälaisia asioita liiketoimintaa mallintavaan ohjelmistoon kuuluu ja miten ohjelmiston kautta tapahtuvat prosessit etenevät. Konkreettinen implementaatio tämän jälkeen olisi triviaalia (ja hyvällä tavalla tylsää). Dokumentaatioksi kelpaavasta “koodista” ei hyötyisi pelkästään asiakas vaan kuka tahansa, joka ylläpitää ohjelmistoa tai siihen liittyvää palvelua.

Esitän suurpiirteisen esimerkin havainnollistaakseni minkälaisia ajatuksia haen takaa. Ohjelmistoa voidaan ajatella järjestelmänä (tai tehtaana), joka muodostaa kokonaisuuden yhdistelemällä pienempien järjestelmien välistä viestintää. Kokeillaan rakenteiden siirtyvyyden “lakia” ja sovelletaan Kanbanin ensimmäistä sääntöä: visualisoi. Mitä jos nämä järjestelmät ja niiden välillä kulkevat viestit visualisoitaisiin reaaliajassa? Leikkisästi niitä voisi ajatella kaupunkina, joka koostuisi erilaisista yrityksistä, jotka erikoistuvat erilaisiin tehtäviin (laskutoimitukset, asiakastietojen talletus, sähköpostien lähettäminen). Voisimme seurata järjestelmämme toimivuutta ja mahdollisesti optimoida prosesseja tarkkailemalla kaupunkia ja sen sykettä.

Nämä ajatukset voivat olla idealistisia ja moni varmaan kyseenalaistaisi niiden toteutuskelpoisuuden, jopa järkevyydenkin. Mutta kirjoituksessa esille nostetut metodit eivät ole täysin uusia (esim. http://en.wikipedia.org/wiki/Flow-based_programming). Mielestäni tämä voisi olla suunta, jota kannattaisi kokeilla. Demystifioidaan ohjelmointia visualisoimalla järjestelmän tapahtumia ja prosesseja, pyrkimyksenä pienentää liiketoiminnan ja koodin välistä kuilua askeleen verran.

Tarkoitus ei ole, että huomisesta alkaen unohdamme nykyiset toimintatavat ja teemme kaiken eri tavalla. Lähinnä haluaisin muistuttaa, miltä digitalisoituva maailma näyttää tällä hetkellä, ja kannustaa pohtimaan, minkälainen näkymä se tulevaisuudessa saattaa olla.