Ohjelmistotuotannolla ja ruuanlaitolla näyttäisi muutaman esimerkin valossa olevan jonkin verran yhteisiä piirteitä. Hahmottelin viikolla ohjelmistotuotannon yhtymäkohtia kokkaamiseen ja löysin hyvin nopeasti useita gastronomisia vertauksia. Ajatusleikki alkoi oikeastaan ohjelmistoalan ongelmista ja miten ne heijastuvat ohjelmistoja tilaavan asiakkaan elämään ja siinä samassa ohjelmistojen tuottajiin. Kaikki alan toimijat eivät suinkaan anna aihetta ongelmien ruotimiseen, mutta pitkään alalla olleena olen joutunut usein toteamaan, miten vaikeasta alasta on kysymys, etenkin silloin kun sitä ei hallitse.
Vaatimusmäärittely on yksi tärkeimpiä ohjelmistoprojektin työvaiheita. Ohjelmiston tilaava asiakas luettelee erinäisiä vaatimuksia tai tarkalleen ottaen toiveita, mitä ohjelman pitäisi saada aikaa ja joskus keskusteluihin lipsahtaa myös ohjeita, miten ohjelman pitäisi toimia. Olen monta kertaa yrittänyt tuoda julki, että vaatimusmäärittelyvaihe tulee itse asiassa jo hieman myöhässä ohjelmiston toimittajan näkökulmasta. Ennen vaatimuksia asiakasorganisaatio on jo ehtinyt tehdä suuren luokan linjanvetoja, joita kutsutaan strategiaksi. Asiansa osaava ohjelmistomyyjä ei tyydy pelkkiin vaatimuksiin, vaan haluaa tietää niiden takana olevan strategian, joka ohjaa organisaatiota suurella kädellä ja pidemmällä aikavälillä. Nämä tiedot ovat myyjälle kullanarvoisia, sillä hän voi niiden avulla tarjota huomattavasti suuremman ja kattavamman ohjelmiston, joka palvelee monipuolisesti koko organisaation tietojenkäsittelytarpeita. Strategian ymmärtäminen auttaa samalla ymmärtämään, mihin tarkoitukseen projektoitu ohjelmisto tulee ja miten se auttaa toteuttamaan strategiaa.
Liian usein ohjelmistoja ryhdytään kuitenkin toteuttamaan ilman kunnollista vaatimusmäärittelyä. Tätä voisi verrata epäonnistuneeseen kahvitilaisuuteen. Asiakas ilmoittaa catering-toimittajalle järjestävänsä kahvitilaisuuden. Ohjelmistoalan näkökulmasta katsottuna kyseessä on pienimuotoinen projekti. Toimittaja kattaa kahvipöydän iltapäiväksi, mutta asiakas ei ole tyytyväinen. Kahvi loppuu kesken, pöydästä puuttuu laktoosittomat kahvileivät eikä teevettäkään muistettu keittää. Projektin tuotoksia yritetään paikata keittämällä kesken kaiken lisää kahvia, mutta osa vieraista joutuu odottamaan. Toimittaja kattaa pöydän mutu-menetelmällä niin kuin parhaaksi näkee ja sillä tietämyksellä, joka hänelle on aiemmista vastaavanlaisista kattauksista kertynyt. Vaatimusmäärittelyyn ei siis panosteta riittävästi. Pienet ja ketterät ohjelmistoprojektit muistuttavat usein esimerkin kahvitilaisuutta. Niissäkin hyökätään toteutukseen heti, kun asiakas on indikoinut jonkin tietojenkäsittelytarpeen perehtymättä taustalla oleviin suurempiin kuvioihin. Ammattitaitoinen kahvinkeittäjä selvittää asiakkaalta etukäteen vieraiden määrän, tilaisuuden keston, erikoisruokavaliot ja muut onnistuneen kahvitilaisuuden järjestämiseen tarvittavat seikat eli vaatimukset.
Ohjelmistojen toteutus on yhtä kirjavaa kuin sateenkaaren värit. Ohjelmistoja ryhdytään liian usein toteuttamaan tyhjältä pöydältä. Jos haluan syntymäpäiväkakun, ostan sen valmiina. Samalla tavalla myös ohjelmistoja voi ostaa valmiina ja ryhtyä vain käyttämään niitä. Kaikki valmisohjelmistot eivät sellaisenaan kelpaa tilaajalle, joten räätälöinti jää ainoaksi vaihtoehdoksi. Jos en löydä mieluista synttärikakkua, voisin ostaa valmiin kakkupohjan ja purkillisen hilloa ja koota kakun itse omassa keittiössä. Vastaavasti ohjelmistonkin voisi koota valmiista komponenteista tai parametroimalla valmiin tuotteen. Vihoviimeinen tapa saada kakku juhlapöytään olisi leipoa se raaka-aineista alusta loppuun itse. Valitettavan usein ohjelmistotuotanto on juuri tätä viimeksi mainittua kokkaamista. Siinä kuluu paljon aikaa ja resursseja eikä lopputuloksesta ole silti takeita. Asiaa ei lainkaan paranna sekään, että ohjelmistoa valmistetaan suljetussa kammiossa eikä asiakkaalle anneta edes maistiaisia välillä.
Ohjelmistotuotannossa pitäisi siirtyä täytekakkujen leipomisen sijasta kokonaisvaltaisempaan catering-palveluun. Monet ohjelmistotoimittajat ovat liikaa keskittyneet alkutuotantoon. Keskusteluja käydään teknologioista, versioista, työkaluista ja prosesseista. Keittiöstä katsottuna kokit keskustelevat asiakkaan kanssa karkeista ja puolikarkeista vehnäjauhoista, kun oikeasti pitäisi keskustella asiakkaan juhlista yleisemmällä tasolla. Ohjelmistotuotannonkin pitäisi jo vihdoin alkaa nostaa abstraktiotasoaan ja katsoa asiakkaan tarpeita kokonaiskuvana. Kokonaiskuvan saa aikaiseksi vain tutustumalla organisaation strategiaan ja kiinnostumalla aidosti asiakkaan toiminnasta. Tämän päivän ohjelmistotalot näkevät asiakkaan enemmänkin työllistäjänä ja rahanlähteenä eikä kaukaa ole haettu sekään väite, etteivät ohjelmistotoimittajat ole kiinnostuneita pitkällä tähtäimellä asiakkaan tietojenkäsittelytarpeista ja siitä, onko ohjelmistohankinnoilla todella hyötyä asiakkaalle.
Samannäköinen syntymäpäiväkakku voidaan leipoa monella eri reseptillä. Kakut näyttävät ulkoapäin samoilta, mutta niiden koostumus voi vaihdella hyvinkin paljon kokista riippuen. Ohjelmistotuotanto kärsii vastaavanlaisesta runsaudesta. Samalta näyttävä ohjelmisto voidaan koodata tekijästä riippuen äärettömän monella eri tavalla. Ohjelmistoalalla on vielä sekin vitsaus, että monet reseptit kulkevat suullisena perimätietona tekijältä toiselle. Keittokirjoistakaan ei aina ole hyötyä, kun niitä ei ole kirjoitettu formaaliin muotoon vaan tekijänsä omalla murteella. Monenlaiset gastronomiset herkut ovat toki paikallaan. Niiden tehtävänä on tietysti antaa ravintoa mutta myös tarjota makuelämyksiä. Tietojenkäsittelyssäkin pätevät samat tavoitteet. Järjestelmien on palveltava käyttötarkoitustaan mutta samalla toimittava käyttäjän kannalta miellyttävästi. Näihin makuelämyksiin on kuitenkin yhä matkaa, ja sitä ennen ohjelmistotuotannon keittiössä poltetaan pohjaan vielä monet projektit.