Tehokkuuden varjopuoli: mitä maksaa liian vaivaton kehitys?
Kun tehokkuudesta tulee haittapuoli: tekoälytyökalut ja saumattoman kehityksen piilokustannukset
Luvut näyttävät vaikuttavilta. Tiimisi tekoälyavusteinen sprintti tuotti enemmän kuin kolme edellistä sprinttiä yhteensä. Pull requestit yhdistyvät nopeammin, ominaisuudet toimitetaan nopeammin, ja mittaristot hehkuvat vihreää. Mutta jokin hiljaisempi on ohuentunut reunoilta, eikä sitä näy missään sprint-taulussa.
Olen pohtinut tätä jännitettä paljon, erityisesti kun seuraamme tekoälyavusteisen kehityksen muokkaavan insinööritiimien toimintatapoja NameOceanilla ja laajemmin koko ekosysteemissä. Tuottavuusparannukset ovat todellisia. Samoin jotain muuta.
Paradoksi, josta kukaan ei puhu
Tässä on ohjelmistokehityksen nykyhetken outous: meillä on voimakkaampia työkaluja kuin koskaan ennen, ja silti tiimien välillä, jotka todella ymmärtävät järjestelmiään, ja niiden välillä, jotka vain operoivat niitä, on aukko joka ei ole koskaan tuntunut leveämmältä. Tekoälykoodausagentit ovat tehneet koodin toimittamisesta hämmästyttävän helppoa. Mitä ne ovat vaikeuttaneet nähdä, on se, ymmärtääkö kukaan tiimissä todella mitä tuo koodi tekee kun järjestelmä kohtaa olosuhteita, joita toteutus ei osannut ennakoida.
Tämä ei ole tekoälyvastainen pamfletti. Me itse rakennamme NameOceanin Vibe Hosting -alustalle tekoälyavusteisilla työnkuluilla. Tehokkuusparannukset ovat laillisia ja merkittäviä. Mutta hienovarainen ansa on muotoutumassa, joka ansaitsee enemmän huomiota kuin mitä se saa keskustelussa, joka tyypillisesti kallistuu joko "tekoäly korvaa kehittäjät" -tai "tekoäly on vain työkalu, lopeta huolestuminen" -leireihin.
Totuus on vivahteikkaampi ja kiinnostavampi kuin kumpikaan näistä kannoista.
Mistä asiantuntijuus oikeasti tulee
Insinöörit, joita olen eniten ihaillut vuosien varrella, eivät olleet arvokkaita koska he kirjoittivat koodia nopeasti. He olivat arvokkaita koska he olivat rakentaneet kattavia mielenmalleja järjestelmistään vuosien suoran kanssakäymisen kautta. He olivat jäljittäneet mystisiä tuotantoympäristön ongelmia useiden abstraktiotasojen läpi. He olivat debuganneet kilpailutilanteita kello 2 yöllä ja tulleet ulos intuitioilla siitä, miten heidän järjestelmänsä käyttäytyi paineen alla — intuitioita, joita mikään dokumentaatio ei voinut välittää.
Tämä asiantuntemus muodostui kitkan kautta. Se muodostui koska insinöörin piti ymmärtää jotain syvällisesti ratkaistakseen ongelman edessään. Tuotantohäiriön paine loi olosuhteet aidolle oppimiselle.
Tätä kutsutaan oppimistutkijoissa aktiiviseksi uudelleenrakentamiseksi. Tieto ei siirry passiivisesti päidemme sisään kuten dataa tallennustilaan. Rakennamme ymmärrystä aktiivisesti rekonstruoimalla mielenmallejamme, tyypillisesti vastauksena kohtaamiseen, joka haastaa olemassa olevat oletuksemme. Se debuggaussessio, joka pakottaa sinut tarkistamaan ymmärryksesi siitä, miten hajautettu järjestelmä todella käsittelee osittaisia vikoja? Siellä oppiminen elää.
Tekoälykoodausagentit ovat hämmästyttävän hyviä poistamaan kitkaa, joka pakottaa tämän uudelleenrakentamisen. Ne vastaavat kysymyksiin ennen kuin olet täysin muotoillut ne. Ne toteuttavat ratkaisuja ennen kuin olet tyhjentänyt omat ongelmanratkaisuyrityksesi. Ne tekevät helpoksi hypätä suoraan vastauksen luo.
Ja tekemällä niin, ne saattavat hiljaisuudessa poistaa olosuhteita, joissa syvä asiantuntemus muodostuu.
Abstraktio-ongelma, joka meillä jo oli
Tämä ei ole täysin uutta. Moderni ohjelmistokehitys on aina sisältänyt abstraktiotasoja, jotka etäännyttävät insinöörit alapuolisiin järjestelmiin. Kun otat käyttöön kontteja Kubernetesissa GitOps-työnkulkujen kautta hallinnoituna, et koskaan ole suorassa vuorovaikutuksessa kernelin prosessien aikataulutuksen kanssa. Se on tarkoituksellista. Abstraktio mahdollistaa mittakaavan ja erikoistumisen.
Mutta tässä on asia abstraktion suhteen: se sisältää aina vaihtokaupan. Se kognitiivinen helpotus, jonka se tarjoaa paikallisesti, tulee etäisyyden kustannuksella alapuoliseen käyttäytymiseen. Sinun alusta-insinöörisi eivät välttämättä tarvitse ymmärtää Linux-verkkopinoa intiimisti luotettavien palveluiden käyttöönottoon Vibe Hostingissa. Se on hyvä. Mutta jossain kohtaa organisaatiotasi jonkun todennäköisesti tarvitsee ymmärtää mitä tapahtuu kun konttiverkkokerros kohtaa todelliset verkkoolosuhteet, joita Linuxin TCP-toteutus käsittelee tietyillä tavoilla muistipaineen alla.
Useimmissa organisaatioissa tämä ymmärrys kertyi hitaasti sivutuotteena siitä, että insinöörejä pakotettiin olemaan suoraan tekemisissä järjestelmiensä kanssa useilla tasoilla. Kun jotain meni rikki tavalla, jota ei voinut abstrahoida pois, uudelleenrakentaminen tapahtui.
Tekoälyavusteinen kehitys tiivistää tuota etäisyyttä edelleen, molempiin suuntiin. Se tekee helpommaksi toimittaa monimutkaisia hajautettuja järjestelmiä ilman syvää sitoutumista yksittäisiin komponentteihin. Ja se tekee helpommaksi päästä irti kun törmää jotain odottamatonta, mikä tarkoittaa vähemmän pakotteita uudelleenrakentamiselle, joka rakentaa aitoa ymmärrystä.
Mittausongelma
Tässä on miksi tämä ongelma pysyy näkymättömänä niin kauan: tekoälyavusteisen kehityksen hyödyt näkyvät välittömästi mitattavissa mittareissa, kun taas kustannukset kertyvät hitaasti ja näkymättömästi.
Voit mitata PR-nopeutta, käyttöönottofrekvenssiä ja ominaisuustoimitusaikaa. Nämä mittarit nousevat tekoälyn käyttöönoton myötä, ja ne nousevat rehellisesti. Tehokkuusparannukset ovat todellisia.
Mitä et voi helposti mitata, on ymmärtääkö tiimisi järjestelmää tarpeeksi hyvin ylläpitääkseen sitä kun olosuhteet muuttuvat epäsuotuisiksi. Jaetut mielenmallit, debuggauksen intuitio ja arkkitehtuurinen päättely eivät näy mittaristoissa. Ne kasautuvat hitaasti vuosien aikana ja kuluvat hiljaisesti kun olosuhteet, jotka niitä vaalivat, muuttuvat.
Tämän vuoksi tiimit voivat jatkaa onnistunutta toimintaa pitkiä aikoja sen jälkeen kun ymmärrys on alkanut ohenemaan. Järjestelmä toimii sujuvasti, mittarit näyttävät terveiltä, ja tiimillä on korkea luottamus nopeuteensa. Mutta asiantuntemus, joka antaisi heille mahdollisuuden käsitellä ennennäkemättömiä vikamuotoja, optimoida reunatapauksia tai päätellä järjestelmän käyttäytymisestä odottamattomissa kuormitusolosuhteissa, ei ole rakennettu uudelleen. Se on peitetty tekoälyavusteisella tuottavuudella.
Vibe Hosting -näkökulma
Ajattelemme tätä paljon NameOceanilla alustaa suunnitellessamme ja ajatellessamme insinööritiimejä, jotka rakentavat sen päälle. Vibe Hostingissa tarjoamme tekoälykiihdytettyä infrastruktuuria ja käyttöönottotyönkulkuja, jotka tekevät palveluiden käynnistämisestä hämmästyttävän helppoa. Kitka jonka poistamme on todellista kitkaa — provisiointi, konfigurointi, skaalaus, SSL-varmenteiden hallinta. Hyvää kitkaa poistettavaksi.
Mutta olemme myös olleet varovaisia, ettei abstrahoida näkyvyyttä, joka auttaa tiimejä rakentamaan aitoa ymmärrystä. Esimerkiksi seurantaintegraatiomme on suunniteltu tuomaan järjestelmän käyttäytyminen selkeästi esiin sen sijaan, että piilotettaisiin se liiallisen automaation taakse. Kun jotain käyttäytyy odottamattomasti tuotannossa, haluat pystyä jäljittämään sen selkeästi, ja se tarkoittaa, että päälle rakentamasi abstraktiot eivät saa kokonaan peittää sitä mitä alla tapahtuu.
Tämä ei johdu siitä, ettemme luottaisi tekoälyavusteiseen kehitykseen. Se johtuu siitä, että uskomme kestävän teknisen huippuosaamisen vaativan tiimejä, jotka ymmärtävät järjestelmänsä syvällisesti, eivät vain tiimejä, jotka voivat toteuttaa nopeasti.
Mitä tämä tarkoittaa käytännössä
En ehdota, että tiimit hylkäisivät tekoälykoodausavustajat. Tuottavuusparannukset ovat liian merkittäviä ja osaajapula liian todellinen jättääksemme ne hyödyt hyödyntämättä. Mitä ehdotan, on että teknologiajohtajat olisivat tahallisempia luomaan olosuhteita, jotka vaalivat aitoa ymmärrystä sen tehokkuuden rinnalla, jonka he saavat.
Muutamia asioita, joita tämä voisi näyttää käytännössä:
Tahallinen kitka. Rakenna aikaa debuggaussessioille, jälkianalyyseille ja järjestelmäsuunnittelukeskusteluille rytmiisi. Käytä häiriöitä oppimistilaisuuksina sen sijaan, että korjaisit vain välittömän ongelman ja jatkaisit eteenpäin. Luo pakotteita, jotka vaativat uudelleenrakentamista, vaikka tekoäly voisi tarjota nopeamman vastauksen.
Syvyys ennen delegointia. Kun otat käyttöön tekoälyavusteisia työnkulkuja, keskustele eksplisiittisesti mitkä ongelmat delegoit tekoälylle ja mitkä säilytät ihmisen päättelylle. Monimutkainen debuggaus, järjestelmäsuunnittelupäätökset ja arkkitehtuuriset valinnat voivat olla arvokkaita säilyttää oppimistilaisuuksina, vaikka tekoäly voisi nopeuttaa niitä.
Mittaa mitä on tärkeää nopeuden rinnalla. Seuraa pelkkien toimitusmittareiden lisäksi myös ymmärryksen mittareita: Voiko tiimisi suunnitella ratkaisuja uusiin ongelmiin itsenäisesti? Voivatko he debugata ongelmia, jotka eivät vastaa olemassa olevia kaavoja? Voivatko he päätellä järjestelmän käyttäytymisestä olosuhteissa, joita he eivät ole aiemmin kohdanneet? Näillä kysymyksillä ei ole numeerisia vastauksia, mutta ne kannattaa esittää eksplisiittisesti.
Arvosta institutionaalisen tiedon rakentamista. Insinööreillä, jotka ovat käyneet läpi järjestelmäsi vaikeita hetkiä, on jotain korvaamatonta: tarkkoja mielenmalleja siitä, miten se käyttäytyy paineen alla. Varmista, että tämä tieto siirtyy mentoroinnin, dokumentaation ja tahallisen tiedonjakamisen kautta sen sijaan, että olettaisit tekoälyn tekevän tuon tiedon tarpeettomaksi.
Uudelleenrakentamisen osinko
Jokainen insinööritiimi toimii vuosien suoran järjestelmäkanssakäymisen kautta rakennetun kumulatiivisen ymmärryksen varassa. Se on uudelleenrakentamisen osinko — ymmärrys, joka muodostuu kun ihmisten täytyy rakentaa mielenmalleja aktiivisen ongelmanratkaisun kautta passiivisen tiedon vastaanoton sijaan.
Tekoälykoodausagentit tarjoavat valtavia tehokkuusetuja vähentämällä kitkaa intention ja toteutuksen välillä. Se on todellista ja arvokasta. Mutta ne saattavat myös vähentää kitkaa, joka pakottaa uudelleenrakentamisen, joka rakentaa aitoa asiantuntemusta.
Tiimit, jotka selviävät parhaiten seuraavasta tuotantokriisistä, eivät välttämättä ole niitä korkeimmilla nopeuslukemilla. Ne ovat niitä, jotka ymmärtävät järjestelmiään tarpeeksi hyvin päätelläkseen ennennäkemättömistä vikamuodoista ja rakentaakseen ratkaisuja, jotka vastaavat sitä miten heidän järjestelmänsä todella käyttäytyy.
Tehokkuusparannukset tekoälyavusteisesta kehityksestä ovat selkeitä ja merkittäviä. Kysymys on, rakennammeko myös ymmärrystä, joka tekee tiimeistä joustavia kun järjestelmät, jotka he ovat rakentaneet, kohtaavat olosuhteita, joita niille ei ole suunniteltu. Se on vaihtokauppa, josta kannattaa olla tietoinen.
Koodi toimitetaan joka tapauksessa. Mutta se, pystyykö kukaan tiimissä selittämään mitä se tekee kun jotain odottamatonta tapahtuu — se on aivan eri kysymys.
Mit käytäntöjä tiimisi on löytänyt tehokkaiksi järjestelmäymmärryksen rakentamiseen tekoälyavusteisen nopeuden rinnalla? Keskustelemme näistä kysymyksistä säännöllisesti NameOceanin yhteisössä, ja kokemuksesi merkitsee.