Teknisesti täydellinen, käytännössä väärä – Corpus 1/3
AI

Tekoäly ratkaisi ohjelmistokehityksessä ongelman, joka ei koskaan ollut pullonkaula. Tilalle tuli uusi ongelma, jota kutsun kognitiiviseksi velaksi.
Teksti: Arttu Ylärakkola
Ennen tekoälyä liiketoimintaihmiset valittivat, ettei ominaisuuksia valmistu tarpeeksi tiuhaan tahtiin. Kehittäjät taas nurisivat, että nykyinen backlog vie jo kaiken ajan eikä uusille featureille ole sijaa.
Nyt koodia syntyy nopeammin kuin koskaan. Valitukset eivät silti ole loppuneet – ne ovat vain muuttaneet muotoaan.
Velka, joka ei näy koodissa
Tekninen velka on tuttu juttu: oikaistaan nyt, maksetaan myöhemmin.
Kognitiivinen velka on hankalampi tapaus, koska sitä kertyy silloinkin, kun koodi on kaunista, testattua ja virheetöntä. Ominaisuuksia valmistuu nopeammin kuin kukaan ehtii sisäistää niitä.
Liiketoimintapuolella kenelläkään ei ole enää ajantasaista käsitystä siitä, miten ohjelmistot oikeasti käyttäytyvät. Kehittäjätiimissä ongelma on toisenlainen: ohjelmisto on aina enemmän kuin ominaisuuksiensa summa, ja kun yhteen ominaisuuteen käytetään entistä vähemmän aikaa, sen vaikutukset muualle järjestelmään jäävät miettimättä.
Näin kokonaisuus karkaa käsistä pala kerrallaan.
Koodi kertoo miten, ei miksi
Tekoäly lukee koodia erinomaisesti, ja koodista selviää, miten järjestelmä toimii. Siitä yleensä selviä:
miksi jokin sääntö on olemassa,
mitä asiakaslupausta sääntö suojaa,
mitä on joskus kokeiltu ja miksi se hylättiin
mitkä reunatapaukset eivät näy koodissa eivätkä testeissä ja
mitä "valmis" tarkoittaa liiketoiminnalle eikä vain testeille.
Esimerkiksi laskutusjärjestelmässä lasku lähtee vasta kolmen päivän kuluttua tilauksesta. Viive näkyy koodissa, mutta siitä ei näe syytä: asiakkaille on luvattu aikaa perua tilaus ilman hyvityslaskurumbaa.
Sitten joku kirjoittaa kiireessä tiketin "nopeuta laskutusta". Tekoäly poistaa viiveen, päivittää testit ja tekee siistin pull requestin. Katselmoija toteaa koodin olevan kunnossa ja hyväksyy sen.
Teknisesti täydellistä, mutta käytännössä väärin.
Mitä asialle voi tehdä?
Omissa projekteissamme ajauduimme vähitellen työtapaan, jolle annoimme lopulta nimen Corpus. Koko juttu mahtuu kolmeen kohtaan:
Projektin versionhallintaan tehdään hakemisto.
Sinne lisätään markdown-tiedostoja, jotka kuvaavat liiketoiminnan kontekstin sekä ihmisille että tekoälylle: sanasto, käyttäjäroolit ja niiden motiivit sekä prosessien kulku.
Tiedostot päivitetään jokaisessa commitissa.
Olennainen muutos on viimeisessä kohdassa. Ilman Corpusta toimitus on pelkkää koodia, mutta Corpuksen kanssa toimitus on koodi ja pieni päivitys Corpukseen.
Toteutusvaiheessa tekoäly näkee liiketoiminnan säännöt ja aiemmat päätökset. Kun teknisesti toimivia vaihtoehtoja on useita, se osaa valita sen, joka sopii myös liiketoimintaan.
Katselmoinnissa Corpuksen diff kertoo selkokielellä, mitä muutos tarkoittaa. Laskutusesimerkissä diffiin ilmestyisi rivi "lasku lähtee heti tilauksen jälkeen". Sen pystyy lukemaan ja pysäyttämään myös ihminen, joka ei ole ikinä avannut koodieditoria.
Sopiiko tämä kaikkeen?
Ei. Tiukasti speksattu, puhtaasti tekninen backend-palvelu jäykillä rajapinnoilla ei hyödy Corpuksesta juuri mitään. Mitä enemmän projektissa on käyttäjäpolkuja ja prosesseja, sitä enemmän siitä on apua.
Seuraavassa osassa kerron, mitä tapahtui, kun aloimme verrata Corpusta ja koodia toisiinsa automaattisesti.
Lue Corpus-sarjan kaikki osat:
1/3: Teknisesti täydellinen, käytännössä väärä: miksi nopea koodi synnyttää kognitiivista velkaa (eiku senhän sä just luit!)
2/3: Koodi väärin, Corpus väärin vai molemmat? Kolme ristiriitaa, jotka paljastavat enemmän kuin testit
3/3: Corpus omaan repoon: mitä hakemistoon kannattaa laittaa ja mitä ei
Mikä on Corpus?
Corpus on projektin versionhallinnassa oleva hakemisto markdown-tiedostoja. Ne kuvaavat järjestelmän liiketoiminnan tasolla: sanaston, käyttäjäroolit ja niiden motiivit, prosessien kulun sekä tehdyt päätökset. Tiedostoja voi lukea kehittäjä, liiketoiminnan ihminen tai tekoäly, ja ne päivitetään aina, kun järjestelmän toiminta muuttuu.
Koodi kertoo tekoälylle, miten järjestelmä toimii. Corpus kertoo, miksi.
Corpus ei ole tuote eikä siihen ole lisenssiä. Se on pelkkä versioitu hakemisto tekstitiedostoja, joten se toimii minkä tahansa kielen, työkalun ja menetelmän kanssa. Emme väitä keksineemme sitä. Ajauduimme tähän työtapaan omissa projekteissamme ja annoimme sille nimen Corpus.
Esimerkkirepo: github.com/rakettitiede/corpus