Päivä, jolloin en rakentanut yhtään ominaisuutta – korjasin vain CI:tä. Se kannatti.

Yksitoista committia pelkkää CI- ja workflow-korjausta yhden päivän aikana. Miksi hauras automaatio on AI-avusteisen kehityksen suurin piilokustannus – ja miten kovetin putken.

Huomio nimistä: Tämä kirjoitus perustuu omaan, oikeaan työhöni. Yritysten nimet on keksitty, eikä luottamuksellista dataa jaeta. Opit ovat aitoja ja sellaisenaan käyttökelpoisia.

Git-historiassani on päivä, jonka yksitoista committia eivät lisänneet yhtään ominaisuutta: Harden GitHub workflow validation, Fix CI workflow bootstrapping, Fix Vercel build dependency install, Align JavaScript branch workflow pnpm setup... Pelkkää putkea, koko päivä.

Se oli yksi kuukauden parhaista työpäivistä. Tässä miksi – ja mitä hauraan CI:n korjaamisesta opin.

Miksi CI:n merkitys räjähti juuri nyt

AI-avusteisessa kehityksessä git-haarojen ja pull requestien määrä moninkertaistuu: agentit tekevät työtä rinnakkain, ja jokainen haara kulkee saman automaation läpi. Silloin CI:n luonne muuttuu. Ennen hauras putki ärsytti; nyt se on kertautuva vero, joka maksetaan jokaisesta agentin avaamasta PR:stä. Punainen ruksi, joka johtuu putkesta eikä koodista, on myrkyllisin mahdollinen signaali – se opettaa ohittamaan punaiset ruksit.

Siksi pysäytin ominaisuuskehityksen ja käytin päivän putken kovettamiseen.

Mitä konkreettisesti korjasin

Workflow-tiedostojen validointi. Workflow-määritykset rikkoutuvat hiljaa: typo triggerissä tai väärä sisennys, ja jokin ei vain koskaan aja. Lisäsin validoinnin, joka tarkistaa workflow-tiedostot itsessään – automaation on valvottava myös itseään.

Bootstrap-ongelmat. Putki oletti asioita ympäristöstä, jotka pitivät paikkansa vain välillä (välimuistit, esiasennetut työkalut). Jokainen oletus muutettiin eksplisiittiseksi asennusaskeleeksi. Hitaampi käynnistys, mutta deterministinen.

Paketinhallinnan yhdenmukaisuus. Eri workflowt asensivat riippuvuudet eri tavoin – yksi pnpm:llä, toinen npm:llä, kolmas väärällä versiolla. Sama setup-askel kaikkiin. Myös Vercel-buildin riippuvuusasennus vaati oman korjauksensa: paikallisesti toimiva build ei kertonut mitään siitä, toimiiko se buildipalvelimella.

Node-versioerot. Testit, jotka nojasivat uudempaan Node-ominaisuuteen (tyyppien strippaus), kaatuivat Node 20:llä. Vaihtoehdot: nosta versio kaikkialla tai skippaa testit vanhalla versiolla näkyvällä merkinnällä. Valitsin jälkimmäisen tietoisena kompromissina – näkyvä skip on rehellisempi kuin salaa punainen putki.

Kolmannen osapuolen tarkistukset. Putkessa roikkui konfiguroimaton CLA-tarkistus, joka ei voinut koskaan mennä läpi. Pois. Jokainen tarkistus, joka ei voi onnistua, on pelkkää kohinaa.

Oikeudet ja PR-rajoitukset. Automaatiohaarat kaatuivat oikeuspuutteisiin ja repo-asetusten PR-rajoituksiin. Periaate: workflow ei saa feilata sellaisen rajoitteen takia, joka on odotettavissa – se joko käsittelee tilanteen tai ohittaa sen näkyvästi.

Opit, jotka voit viedä omaan putkeesi

  1. Kohtele punaista ruksia tuotantobugina. Jos putki feilaa syistä, jotka eivät liity koodiin, tiimi (ja agentit) oppivat ohittamaan sen. Se on kallein mahdollinen kulttuurivaurio.
  2. Tee ympäristöoletukset eksplisiittisiksi. Kaikki mitä putki tarvitsee, asennetaan putkessa.
  3. Yhdenmukaista setup kaikissa workflowissa. Yksi tapa asentaa riippuvuudet, yksi Node-versiopolitiikka.
  4. Poista tarkistukset, jotka eivät voi onnistua. Kohina piilottaa oikeat virheet.
  5. Feilaa vain asioista, jotka ovat oikeasti vikoja. Odotettavissa oleva rajoite käsitellään, ei kaaduta.
  6. Niputa putkityö omaksi päiväkseen. Yksittäin korjaillen CI-ongelmat keskeyttävät kehitystä viikkokausia; yhtenä rykäyksenä ne ratkeavat päivässä.

Putki on hiljainen silloin kun se toimii – ja juuri siksi sen kuntoon laitetut päivät eivät koskaan näytä saavutuksilta. Ne ovat silti niitä päiviä, jotka määräävät kaikkien muiden päivien nopeuden.