Din besked er blevet sendt.
Vi behandler din anmodning og kontakter dig så hurtigt som muligt.
Formularen er blevet indsendt med succes.
Du finder yderligere information i din postkasse.
Som rapporter fra hele branchen viser, er der nu en voksende specialiseret sektor for ingeniører, der fokuserer på at rette AI-genererede kodefejl.
Mønsteret er blevet bemærkelsesværdigt konsekvent. Virksomheder henvender sig til ChatGPT for at generere migreringsscripts, integrationer eller hele funktioner i håb om at spare tid og reducere omkostningerne. Når alt kommer til alt, virker teknologien hurtig og tilgængelig.
Så svigter systemerne.
Og de ringer til os.
På det seneste har vi fået flere og flere af disse forespørgsler. Ikke for at sende et nyt produkt, men for at løse op for det rod, der blev efterladt, efter at nogen stolede på en sprogmodel med deres produktionskode.
På dette tidspunkt begynder det at ligne sin egen nicheindustri. At rette AI-genererede fejl er nu en fakturerbar service. Og i nogle tilfælde en meget dyr en af slagsen.
GitClear's 2024-rapport bekræfter, hvad vi har set hos kunderne: AI-kodningsværktøjer fremskynder levering, men fremmer også duplikering, reducerer genbrug og øger de langsigtede vedligeholdelsesomkostninger.
Men lad os gøre det klart, at vi ikke er "imod AI". Vi bruger den også. Og det er nyttigt i den rigtige sammenhæng, med de rigtige sikkerhedsforanstaltninger. Men det, der frustrerer mig ved den overdrevne afhængighed af AI og dens udbredte konsekvenser - og sikkert også dig - er den magiske tankegang. Ideen om, at en sprogmodel kan erstatte rigtigt ingeniørarbejde.
Det kan den ikke. Og som man siger: Beviset ligger i buddingen. Når virksomheder foregiver noget andet, ender de med at betale nogen som os for at rydde op.
Så hvordan ser et af disse oprydningsjobs ud? Her er, hvad AI-afficionados ikke fortæller dig, når det drejer sig om tabt tid og spildte penge.
Beskeden kommer som regel sådan her:
"Hej, kan du tage et kig på en mikroservice, vi har bygget? Vi brugte ChatGPT til at generere den første version. Vi skubbede den til staging, og nu er vores RabbitMQ-kø helt oversvømmet."
Men sagen er, at symptomerne viser sig meget senere. Nogle gange flere dage senere. Og når de gør det, er det sjældent indlysende, at den grundlæggende årsag var AI-genereret kode. Det ser bare ud som om... noget er galt.
Efter et dusin af disse tilfælde begynder der at tegne sig et mønster:
Og når alting kollapser, efterlader AI dig selvfølgelig ikke en kommentar, hvor der står: "Forresten, jeg gætter her."
Den del er dit ansvar.
Denne kom fra en hurtigtvoksende fintech-virksomhed.
De var i gang med at udrulle en ny version af deres kundedatamodel, som opdelte et stort JSONB-felt i Postgres i flere normaliserede tabeller. Ganske almindelige ting. Men med stramme deadlines og ikke nok hænder besluttede en af udviklerne at "fremskynde tingene" ved at bede ChatGPT om at generere et migrationsscript.
Det så godt ud på overfladen. Scriptet analyserede JSON, udtrak kontaktoplysninger og indsatte dem i en ny user_contacts
bord.
Så de kørte det.
Ingen prøvekørsel. Ingen backup. Direkte ind i staging, som, viste det sig, delte data med produktionen gennem en replika.
Et par timer senere begyndte kundesupporten at få e-mails. Brugere modtog ikke betalingsmeddelelser. Andre manglede telefonnumre i deres profiler. Så ringede de til os.
Vi sporede problemet til scriptet. Det lavede det grundlæggende udtræk, men det gjorde tre fatale antagelser:
NULL
værdier eller manglende nøgler i JSON-strukturen.ON CONFLICT DO NOTHING
, så alle mislykkede indsættelser blev ignoreret.Resultat: om 18% af kontaktdataene var enten tabt eller beskadiget. Ingen logfiler. Ingen fejlmeddelelser. Bare et stille datatab.
Vi satte et lille team til at rede trådene ud. Her er, hvad vi gjorde:
To ingeniører, tre dage. Omkostninger for kunden: omkring $4,500 i servicegebyrer.
Men det største tab kom fra kunderne. Mislykkede notifikationer førte til manglende betalinger og kundeafgang. Kunden fortalte os, at de brugte mindst $10,000 på supportbilletter, SLA-kompensation og goodwill-kreditter på grund af det ene kiksede script.
Det ironiske er, at en seniorudvikler kunne have skrevet den korrekte migrering på måske fire timer. Men løftet om AI-hastighed endte med at koste dem to ugers oprydning og skade på omdømmet.
Denne kom fra en legal tech-startup, der bygger en dokumenthåndteringsplatform til advokatfirmaer. En af deres kernefunktioner var at integrere med en offentlig e-notifikationstjeneste - en tredjeparts REST API med OAuth 2.0 og streng hastighedsbegrænsning: 50 anmodninger pr. minut, ingen undtagelser.
I stedet for at overlade integrationen til en erfaren backend-udvikler besluttede nogen i teamet at "prototype" den ved hjælp af ChatGPT. De indtastede OpenAPI-specifikationen, bad om en Python-klient og fik et rent script med requests
, genforsøgslogik ved hjælp af tenacity
, og opdatering af token.
Det så solidt ud på papiret. Så de sendte den af sted.
Her er, hvad der faktisk skete:
X-RateLimit-Remaining
eller Retry-After
overskrifter. Den blev bare ved med at sende forespørgsler i blinde.httpx.AsyncClient
, implementerede en semaforbaseret throttle, tilføjede eksponentiel backoff med jitter og håndterede korrekt Retry-After
og rate-limit headers.To ingeniører, fordelt på to en halv dag. Omkostninger for kunden: omkring $3,900.
Det største problem er, at deres største kunde - et advokatfirma med tidsfølsomme ansøgninger - gik glip af to vinduer til indsendelse til retten på grund af nedbruddet. Kunden var nødt til at begrænse skaden og tilbyde en rabat for at beholde kontoen.
Alt sammen fordi en sprogmodel ikke forstod forskellen mellem "arbejdskode" og "produktionsklar kode". Og lige pludselig blev endnu et lag af AI teknisk gæld stille og roligt føjet til stakken.
Det skræmmende er ikke, at disse ting går galt. Det er, hvor forudsigeligt det hele er blevet.
Hver eneste af disse hændelser følger det samme mønster. En udvikler beder ChatGPT om en kodestump. Den returnerer noget, der fungerer lige godt nok til ikke at give fejl. De sætter det ind i systemet, rydder måske lidt op i det og sender det ud i den tro, at hvis det kompilerer og kører, må det være sikkert.
Men der er en hage ved det: Store sprogmodeller kender ikke dit system.
De ved ikke, hvordan dine tjenester spiller sammen.
De kender ikke dit latency-budget, din implementerings-pipeline, din observationsopsætning eller dine trafikmønstre i produktionen.
De genererer den kode, der ser mest sandsynlig ud, baseret på mønstre i deres træningsdata. Det er det hele. Der er ingen bevidsthed. Ingen garantier. Ingen intuition for systemdesign.
Og det afspejler sig ofte i resultatet:
Det værste er, at koden ser korrekt ud. Den er syntaktisk ren. Den består linters. Den er måske endda dækket af en grundlæggende test. Men den mangler den ene ting, der rent faktisk betyder noget: kontekst.
Det er derfor, disse fejl ikke dukker op med det samme. De venter på udrulning fredag aften, på vinduer med meget trafik, på sjældne tilfælde. Sådan er den tekniske gæld i AI - den er usynlig, indtil den ødelægger noget kritisk.
Som vi nævnte tidligere, bruger vi også AI. Stort set alle ingeniører i vores team har en Copilot-lignende opsætning kørende lokalt. Det er hurtigt, hjælpsomt og helt ærligt en god måde at springe de kedelige dele over på.
Men her er forskellen: Intet kommer ind i hovedgrenen uden at gå gennem en senioringeniør og i de fleste tilfælde en CI-pipeline, der ved, hvad den skal kigge efter.
LLM'er er gode til det:
Hvad de er ikke god til, er design. Eller kontekst. Eller sikre standardindstillinger.
Derfor har vi bygget vores workflows til at behandle LLM-output som forslag, ikke som en kilde til sandhed. Sådan ser det ud i praksis:
Brugt rigtigt er det tidsbesparende. Brugt i blinde er det en tidsindstillet bombe.
Vi er her ikke for at fortælle dig, at du skal forbyde AI-værktøjer. Det skib er sejlet.
Men at give en sprogmodel commit-adgang? Det er bare at bede om problemer.
Her er, hvad vi anbefaler i stedet:
Lad dem hjælpe med gentagen kode. Lad dem foreslå løsninger. Men Stol ikke på dem med kritiske beslutninger. Enhver kode, der genereres af AI, skal gennemgås af en senioringeniør, ingen undtagelser.
Uanset om det er commit-tags, metadata eller kommentarer i koden, gør det klart, hvilke dele der kom fra AI. Det gør det lettere at revidere, fejlfinde og forstå risikoprofilen senere.
Beslut som et team, hvor det er acceptabelt at bruge LLM'er, og hvor det ikke er. Standardtekst? Selvfølgelig. Auth-flow? Ja, måske. Transaktionelle systemer? Absolut ikke uden gennemgang. Gør politikken eksplicit og en del af dine tekniske standarder.
Hvis du lader AI-genereret kode komme i kontakt med produktionen, er du nødt til at antage, at noget vil gå i stykker på et tidspunkt. Tilføj syntetiske kontroller. Overvågning af hastighedsbegrænsning. Sporing af afhængigheder. Gør det usynlige synligt, især når den oprindelige forfatter ikke er et menneske.
De største AI-drevne fejl, vi har set, kom ikke fra "dårlig" kode. De kom fra stille fejl - manglende data, ødelagte køer, genforsøgsstorme - som ikke blev opdaget i timevis. Invester i observerbarhed, fallback-logik og rollbacks. Især hvis du lader ChatGPT skrive migreringer.
Kort sagt kan AI spare dit team for tid, men den kan ikke tage ansvar.
Det er stadig et menneskeligt job.
AI kan hjælpe dig med at bevæge dig hurtigere. Men den kan ikke tænke for dig.
Den forstår ikke din arkitektur. Den ved ikke, hvad "færdig" betyder i din sammenhæng. Og den er helt sikkert ligeglad med, om din datapipeline stille og roligt går i stykker en fredag aften.
Derfor skal vi som CTO'er holde fokus på systemets modstandsdygtighed, ikke bare på hastighed.
Det er fristende at lade AI håndtere de kedelige dele. Og nogle gange er det fint. Men alle genveje kommer med en ulempe. Når AI-genereret kode slipper ukontrolleret igennem, bliver det ofte til AI-teknisk gæld. Den slags, du ikke ser, før dit ops-team er i gang med brandslukning i produktionen.
Hvis du allerede er løbet ind i den mur, er du ikke alene. Vi har hjulpet teams med at komme sig over alt fra ødelagte migreringer til API-katastrofer. Vi refaktoriserer ikke bare koden. Vi hjælper med at refaktorere tankegangen bag den.
For i sidste ende er det faktisk det, der gør systemerne pålidelige.
Din besked er blevet sendt.
Vi behandler din anmodning og kontakter dig så hurtigt som muligt.
Ved at tilmelde dig accepterer du vores Politik for beskyttelse af personlige oplysninger, herunder brug af cookies og overførsel af dine personlige oplysninger.