Agenttipohjainen ohjelmistokehitys muuttaa ohjelmistokehittäjien ja kehitystiimien töitä. Tässä artikkelissa käymme läpi muutaman hypoteesin ja huomioitavan asian alan tulevaisuudesta. Lopussa pääset arvioimaan oman organisaatiosi valmiutta agenttipohjaisen kehityksen käyttöönottoon.
Sisältö
- Vähemmän koodausta, enemmän abstraktiotasoja
- Vain päästämällä irti syntaksista voit saavuttaa jotain uutta
- Kaikilla muutoksilla tulee olla omistaja, ja sen tulee olla ihminen
- Ohjelmistokehittäjän työssä insinöörityö korostuu
- Skeptikkojen osasto
Vähemmän koodausta, enemmän abstraktiotasoja
Agenttipohjaiset tekoälytyökalut generoivat koodin puolestasi. Parhaimmassa tapauksessa koodi on hyvää ja tarkoituksenmukaista. Ohjelmistokehittäjä voi käyttää aikansa kokonaisuuksien hallintaan ja ylemmän abstraktiotason asioiden pohdintaan. Näitä ovat esimerkiksi arkkitehtuuri, integraatiot ja liiketoiminnan tarpeet.
Abstraktiotasoja on lisätty ohjelmointikieliin ja teknologioihin jatkuvasti, mutta nyt kyseessä on poikkeuksellinen muutos. Tekoälytyökalut ja etenkin niiden sisuksissa hyrskyttävät laajat kielimallit mahdollistavat minkä tahansa kielen käytön; ikään kuin lopullisessa kommunikaation abstraktiotasossa. Ohjelmistoja, koodia, käyttöliittymiä ynnä muuta voi nykyään määrittää esimerkiksi englanniksi tai suomeksi.
Tässä piileekin näiden työkalujen ongelma. Ihmisen käyttämä kieli ei sovi koneelle ja sen tulkkina toimiva LLM on sattumanvarainen; et voi koskaan olla varma, mitä materiaalia kielimalli sinulle tarjoilee. Ohjelmistokehittäjän tulee rakentaa kehitysympäristö siten, että agentilla (tai muilla ihmisillä) on mahdollisimman suuri todennäköisyys onnistua.
Käytännössä tämä tarkoittaa sitä, että käsin koodatun tai AI-avusteisesti generoidun koodin sijaan määrittelemme kielimallin ympäristön, säännöt, toimintamallit ja projektin raamit. Työ muistuttaa enemmän ohjelmistokehitystiimin johtamista kuin johdettavana työntekijänä toimimista.
Muutos on hyvin mahdollisesti henkisesti kuormittava. Mikäli kehittäjän rooli ja vastuut laajenevat, tulee niiden jostain kohtaa myös kutistua. Uskallan väittää, että monessa tapauksessa tämä tarkoittaa varsinaisen koodin ja koodaamisen siirtymistä alemmalle tekoälyn suorittamalle abstraktiotasolle. Ohjelmistokehittäjä ei siis vietä enää suurta osaa ajastaan kirjoittamassa koodia.
Vain päästämällä irti syntaksista voit saavuttaa jotain uutta
Mikäli ohjelmistokehittäjä obsessoi jokaista koodiriviä tai jonkin ongelman juuri oikeaa ratkaisutapaa, ei agenttipohjainen tekoäly todennäköisesti lisää tehokkuutta merkittävästi. Uskon, että tulevaisuudessa ohjelmistokehittäjän tulee – niin hyvässä kuin pahassa – päästää irti koodista ja keskittyä ratkaisun lopputuloksen oikeellisuuteen.
Koodin oikeellisuus ja laatu ovat liiketoiminnallinen kysymys. Se koostuu eri asioista; koodin tuottamiseen käytetyistä resursseista (aika, raha ja ihmisten henkinen kuorma) sekä riskiprofiilista (toimiala, laki, mahdollinen brändihaitta). Joillain voi olla varaa olla välittämättä koodin laadusta, kun taas toinen ei voi sallia mitään tekoälyn generoimaa koodipohjaansa!
Etenkin itsenäisten agenttien avulla tehty ohjelmistokehitys ei kuitenkaan tule korvaamaan täysin tai joissain tapauksissa edes osittain ihmisiä.
Koodin kirjoittaminen on myös mielekästä työtä, silloin kun siihen on aikaa ja rauha. Itse tehdessä osaaminen kasvaa tai edes pysyy ennallaan, ja henkinen omistajuus rakennettavasta palvelusta kasvaa.
Miten paljon ihminen voi luovuttaa vastuuta koneelle? Onko vastuun jättäminen tekoälylle aina ns. vibakoodausta? Riippumatta siitä, miten laajasti agenteille annetaan oikeuksia ja työtehtäviä, ihmisen tulee aina johtaa tekemistä.
Kaikilla muutoksilla tulee olla omistaja ja sen tulee olla ihminen
Tekoälytyökaluja ei saa jättää itsenäisesti puuhastelemaan omiaan.
Ensimmäiseksi agentit voivat harvoin tehdä niin valmista tavaraa, jonka voisi sellaisenaan julkaista maailmalle. Ihmisen tulisi olla vähintään loopissa mukana, mutta mieluiten kuskin paikalla.
Toiseksi agentit eivät voi kantaa esimerkiksi juridista vastuuta. Juridisen, taloudellisen tai minkä tahansa muun vastuun kantamiseen tarvitaan aina ihminen. Agentin tai tekoälyn syyttäminen mistään on laiskaa ja omien velvollisuuksien laiminlyöntiä.
Entä jos vastuunkantajaihminen delegoi agentille jotain sellaista, mitä hän ei itse ymmärrä? Hän ei joko ehdi, jaksa tai hänellä ei ole kompetenssia arvioida agentin/tekoälyn tuotoksia. Ihmiset toki luottavat laitteiden ja ohjelmistojen valmistajiin lähes kaikessa arjen tekemisessä, mutta laajan kielimallin tuottaman materiaalin takana ei ole vastuunkantajaa. Vastuu lankeaa mallin käyttäjälle.
Löydämmekö itsemme tilanteista, joissa otamme enenevissä määrin riskiä ja vastuuta kompleksista asioista, joita emme ymmärrä?
Ohjelmistokehittäjän työssä insinöörityö korostuu
Kuinka luoda puitteet jossa erehtyvä kielimalli kukoistaa? Kuinka minimoida hallusinaatiot ja tyhmät virheet?
Jotta agentti voi toimia halutusti, täytyy sille määrittää ja rakentaa sopivat puitteet ja tarkat prosessit. Ilman rajoitteita tai kunnollista suunnitelmaa touhuava agentti päätyy ennen pitkää umpikujaan tai tietovuodon äärelle. Tarvitsemme kuria ja itsekuria: agenttiin kohdistuvaa hallinnointikuria ja kehittäjään itseensä kohdistuvaa itsekuria – omien neuvojen ja prosessien noudattamista.
Lopulta kyse on ohjelmistokehityksen parhaiden käytäntöjen noudattamisesta, ja agenttiflown rakentamisesta niin, että näitä käytäntöjä on teknisesti pakko noudattaa. Ihmisille jää, ainakin toistaiseksi, edellämainitut abstraktiotasot, määrittelytyö ja projektin hallinta.
Kuri luo positiiviset raamit toimimiselle, mutta kuinka varmistaa, että agentti tekee oikeita asioita? Kielimalli toimii niin hyvin kuin sille annettu syöte. Syötettä kutsutaan myös kontekstiksi, joka koostuu muun muassa yleisistä projektin ohjeista, nyt tehtävästä toimenpiteestä (esimerkiksi: rakenna notifikaatiojärjestelmä), ja siihen liittyvistä lähdekoodin osista. Karkeasti voisi sanoa, että samat asiat, joita kokenut kehittäjä ajattelee suunnitellessaan ja toteuttaessaan kyseistä toimenpidettä.
Työn painotus siirtyy käsityömäisestä koodin kirjoittamisesta suunnitelman miettimiseen ja sen toteutumisen valvomiseen. Itse koodin tuotto on lopputulema pitkälle prosessille, johon sisältyy muun muassa:
- liiketoiminnan ymmärtäminen ja muotoilu,
- sen pohjalta suunnitelmien rakentaminen ja iterointi,
- asiakkaiden kuuntelu,
- arkkitehtuurisuunnittelu,
- käyttöliittymäsuunnittelu,
- ohjelmointi,
- infrastruktuurin konfigurointi, hallinta ja monitorointi,
- muutosten hallinta,
- tiedon hallinta,
- loppuasiakkaan asiakaspalvelu,
- virheiden käsittely ja korjaus,
- elinkaaren hallinta,
- kaikki inhimilliset taidot normaalista kommunikaatiosta vaikuttamiseen ja johtamiseen.
Agentit tulevat vähentämään osaa tästä, korvaamaan joissain tilanteissa osan, ja samalla luomaan aikaa kaikelle muulle.
Agenttien käyttöönotto ja niiden tehokas käyttäminen vaatii ihmisiltä kognitiivista kaistaa. Tähänkin on tarjolla konsultointia.
Mutta, agenttiautuus ei kuitenkaan ole taattu.
Skeptikkojen osasto
Agentit, tai tekoäly yleensä, ei ole automaattinen ratkaisu kaikkeen.
Milloin agentteja ei kannata käyttää?
Mikäli haluat vibakoodata tuotteesi PoC:ia pidemmälle, ei pelkkä koodin generoiminen riitä. Mikä tahansa tekoäly tai ihmisäly ajaa toteutuksena solmuun, mikäli hän ei noudata yllä olevia hyviä käytänteitä. Kun olet vibakoodannut jonkun kokeilun ns. tuotantoon asti, tulee sinun opetella ohjelmistokehityksen hyvät käytänteet tai kutsua apua.
Mikäli työskentelet tietoturvallisesti tai -suojallisesti hyvin kriittisten teemojen äärellä, agenttipohjainen kehitys ei välttämättä ole juuri sinun juttusi, vaan haluat ennemminkin käyttää tekoälyä parikoodausmaisena apurina. Agenttejakin käyttäessä kaikki muutokset tulee tarkistaa, eikä päästää suoraan tuotantoon.
Mikäli työskentelet kriittisen bisneslogiikan kanssa ja haluat toden teolla ymmärtää ja säilyttää omistajuuden koodilla määritettyihin sääntöihin, itse tekemällä saa juuri sitä mitä haluaa ja pystyy. Samalla muistijälki syntyy todennäköisesti paremmin.
Mikäli et kykene noudattamaan hyviä käytänteitä normaalisti, et todennäköisesti löydä lisäkuria tekoälyn kanssa toimiessa.
Mikäli haluat juurta jaksaen oppia jotain, kannattaa asia ehkä ensi tilassa yrittää rakentaa itse. Agentti voi toki toimia myös opettajana, mutta kiusaus mennä niin sanotusti lujaa eteenpäin voi olla suuri.
Riskejä ja haasteita
Alla esimerkkejä erilaisista agenttien käytöstä johtuvista riskeistä:
- Liian pitkälle vibakoodattu tuote, johon kerätään käyttäjädataa ilman tiedon hallinnan suunnitelmia
- Ei muutostenhallinta- tai versionhallintaymmärrystä
- Tietoturva-aukot ja kykenemättömyys nähdä niitä
- Performanssihaasteet
- Datan kerääminen ilman tarkoitusta
- Datan ja tietokannan muutoshallinta
- Spagetiksi muuttuva koodipohja
- Regressiobugit eli yksi korjaus rikkoo palvelun muualla
Agentit voivat korjata näitä asioita, mutta ongelma piilee siinä, että jonkun on pystyttävä sanelemaan agentille näihin liittyvät huomiot ja toimenpiteet juuri oikeaan aikaan. Tällaisissa tilanteissa paras apu on ihmisten intuitio, joka syntyy erilaisista kehitysympäristöistä ja -hankkeista.
Ohjelmistokehittäjän identiteetti
Ohjelmistokehittäjän identiteetti perustuu monesti oman työn jälkeen. Ja oman työn jälki on konkreettisimmillaan lähdekoodin ympärillä, vaikkakin työhön kuuluu myös muita taitoja, kuten esimerkiksi kommunikaatio, määrittelytyö ja debuggaustaidot.
Jos konkreettisin tekeminen poistetaan kehittäjältä, muuttuu hänen arkensa merkittävästi. Koodin kirjoittamisen sijaan hän lukee sitä.
Jos konkreettisin työn laadun mittari poistetaan, tai sitä on vaikeampi hallinnoida, täytyy tilalle tuoda jotain muuta. Uskon, että lopulta koodin laadun sijaan puhumme ohjelmiston laadusta asiakkaan tai loppuasiakkaan näkökulmasta. Tämä voi parhaimmillaan olla tiimin eri rooleja yhdistävä asia. Pahimmillaan kehittäjä voi kokea menettäneensä työstään sen itselleen kiinnostavimman tai merkittävimmän asian.
Tilanteeseen ei ole mitään oikeaa ratkaisua, vaan kullekin ihmiselle tulisi löytää sopiva balanssi oman osaamisen, oppimishalun, tehokkuusajattelun ja ideaalin työnkuvan kanssa. Tekoäly tai agenttipohjainen kehitys ei laskeudu kaikkialle samaan aikaan, joten kukin voi itse tasapainoilla näiden työkalujen käyttöönoton kanssa.
Uskon, että lopulta samankaltaiset identiteettipohdinnat tulevat koskettamaan lähes kaikkia tietotyöläisiä.
Suositus kokeiluille
Agentit muuttavat tekemistä, pala ja osasto kerrallaan. Ne voivat korvata joitain työn osia, mutta eivät kokonaisuuksia. Systeemiajattelijat ja generalistit ovat hyvässä asemassa hallinnoimaan agentteja. Syväosaajat voivat ratkaista haasteita, joihin agentit eivät pysty.
Vahva suositus agenteille. Ole kärsivällinen niiden käytön kanssa. Agentit pystyvät jo moneen, ja niiden kyvykkyyden kasvavat.
AI-agenttien käyttöönotto: riski/hyöty
Arvioi organisaatiosi valmius agenttipohjaisen kehityksen käyttöönottoon
Esivalinnat ja tulokset ovat suuntaa antavia ja niiden tarkoitus on herättää ajatuksia!
