Claude er ikke en kompilator: distribuert DNS-server på en uke uten å lese koden
Bygde en geografisk distribuert DNS-server på omtrent en uke med flere parallelle agent-løkker, og leste selv nesten ingenting av koden.
Josh Bleecher Snyder, som skriver på exe.dev-bloggen, trakk denne uken tilbake sitt eget spørsmål fra tidlig 2025 om Claude er en kompilator. Svaret hans nå er at spørsmålet er feil stilt. En kompilator jobber i ett lag, fra kildekode til binær, mens en språkmodell beveger seg vertikalt gjennom strategi, produkt, arkitektur, kode og maskinkode uten å måtte booke møter eller be om lov.
Bakgrunnen er et konkret driftsproblem. Virtuelle maskiner hos exe.dev får domenenavn på formen vm-navn.exe.xyz, men DNS-propagering tok av og til minutter mens maskinene selv startet på sekunder. Selskapet skrev derfor sin egen DNS-server. Da de la til flere regioner, ble Oregon-hostingen ny flaskehals, og utrullinger ga små DNS-avbrudd. Det de trengte, var en geografisk distribuert, men fullt konsistent DNS-server.
De strategiske og arkitektoniske valgene tok teamet i et fysisk møte: generell DNS-server med egne atferdsjusteringer på toppen, nav-og-eike-modell, append-only replikering, persistens ute på kantene. Resten kjørte Snyder gjennom flere samtidige agent-løkker som bygde hele systemet med tester og fiendtlig kodegjennomgang. Deretter ba han nye agenter sammenligne de ferdige implementasjonene mot hverandre og lete etter avvik.
Der ligger det interessante funnet. Agentene stilte spørsmål på alle nivåer, men de tok også et stort antall viktige avgjørelser uten å spørre, og de tok dem ulikt. Databaserulleback bryter kontrakten om at replikeringsloggen bare vokser. Agentene så problemet og løste det på vidt forskjellige måter. Snyder landet på et tidslinjefelt: hver rad får en tilfeldig generert tidslinjeverdi, og hver synkroniseringsforespørsel om «alt etter rad N» sender med kantserverens tidslinjeverdi for rad N. Ved avvik vet systemet at historien er endret, og faller tilbake til full resynkronisering.
Snyder kjørte hele den differensielle spesifikasjonsanalysen tre ganger, med to av aforismene sine som begrunnelse.
«Planlegg å kaste én implementasjon; du gjør det uansett.» > — Fred Brooks, The Mythical Man-Month
«Planlegger du å kaste én, kaster du to.» > — Craig Zerouni
Utbyttet var ikke koden, men et arrvevsdokument: en tett samling av beslutninger som viste seg å bære, fra overordnede mål ned til den eksakte formen på datatypen for lastbærende samtidige cacher. Sluttsystemet fikk enhetstester, ende-til-ende-tester, en skyggemodus for å avlaste risiko ved produksjonsutrulling og et knapt dokumentsett skrevet av og for agenter. Hele arbeidet tok omtrent en uke av oppmerksomheten hans. Antall DNS-hendelser en måned etter lansering: null.
For deg som bygger, ligger poenget i hva slags artefakt du sitter igjen med. Snyder skiller det han gjorde fra vibe-coding: han overlot aldri en oppgave og lot agenten ta beslutningene alene. Beslutningene ble hans, men agentene gjorde dem billige nok til at han kunne ta mange av dem, på flere nivåer samtidig, inkludert beslutningen om hvilke beslutninger som faktisk betydde noe. Da han presenterte løsningen for kollegene og fikk spørsmål om hvordan X virker og hva som skjer under betingelse Y, kunne han svare på alt.
Han mener samtidig at agenter ikke er fribillett ut av de dype lagene. Mesteparten av Go-standardbiblioteket er skrevet i Go, men noen få nøkkelrutiner er skrevet i assembly, og der kan du ikke lene deg på kompilatoren.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.