AI en codekwaliteit | Blog

~/blog/gids/ai-quality

AI en codekwaliteit

Genereren is goedkoop geworden. Beoordelen niet. Over tests, churn en de lat die blijft staan.

Waar deze gids over gaat

Code genereren kost tegenwoordig seconden. Beoordelen of die code klopt, of hij past in het systeem en of hij standhoudt, kost nog precies evenveel als vroeger. Die schaar is het onderwerp van deze cluster, want vrijwel elk kwaliteitsprobleem met AI-code is er een variant van.

Ik schrijf hierover vanuit de praktijk. Ik gebruik agents dagelijks en ze leveren echt werk op. Juist daarom valt op waar het knelt: de output groeit, de reviewcapaciteit niet, en alles wat je niet beoordeelt komt later terug met rente. Snelheid werd goedkoop, je oordeel niet werkt dat uit aan de hand van wat massale orkestratie met je review doet.

Het begint voordat de code er is

De meeste slechte AI-code komt voort uit een slechte opdracht. De prompt is geen spec is het hele argument: een vage intentie is geen set requirements, en het model vult de gaten opgewekt op met iets aannemelijks. Het vervolg is de spec die je niet las: een agent je spec laten schrijven is prima, hem ongelezen doorsturen naar een tweede agent is waar het misgaat.

Er zit ook een signaal in hoe zwaar de agent het heeft. Je agent lijdt onder je technische schuld: struikelt een model steeds in dezelfde hoek van je codebase, dan was die hoek al verwarrend voordat het model er was.

Tests die iets bewijzen

De voor de hand liggende reflex: laat de AI de tests ook schrijven, dan komt de kwaliteit vanzelf goed. Bijna. Coverage bewijst alleen dat een regel is uitgevoerd, niet dat iemand zou merken dat hij fout is. En een model dat een denkfout maakt in de code, maakt diezelfde denkfout doodleuk nog een keer in de test. In AI genereert je tests, maar test het ook echt? gebruik ik mutation testing om die schijnzekerheid meetbaar te maken: saboteer de code en kijk of er ook maar één test rood wordt.

Review is de andere poort, en die verandert zodra een model de auteur is. De checklist voor het reviewen van AI-code beschrijft waar ik op let, in welke volgorde, en welke van je oude reviewreflexen niet meer aanslaan.

Wat er met je codebase gebeurt

Kwaliteit gaat verder dan de losse PR. Op codebase-niveau zie je drie patronen terugkomen.

Het eerste is meetbaar: code churn, regels die binnen twee weken alweer herschreven worden omdat de eerste versie nooit echt af was. Het tweede is sluipender: de lavalaag, code die niemand meer begrijpt en die daarom niemand meer durft aan te raken. Om het derde lacht iedereen, tot hij er zelf op grept: twintig manieren om bedragen te formatteren in één repo, omdat een agent zonder weet van je bestaande helpers er elke keer een nieuwe bij schrijft.

Codekwaliteit meten bij AI-code laat zien hoe je aan alle drie een getal hangt, en waarom drie van de meest voor de hand liggende meetinstrumenten je een cijfer geven dat AI-code juist vleit. Staat de diagnose eenmaal vast, dan is de opruimronde de behandeling. Datzelfde gereedschap krijgt er een vraag bij die het ter plekke niet kan beantwoorden: ligt het aan het model waar je net op bent overgestapt? AI-modellen vergelijken zonder benchmark is de meetopstelling daarvoor, en meteen de uitleg waarom je reflex om de prompt opnieuw te draaien en de uitkomsten te vergelijken niets bewijst.

De lat die blijft staan

Daarom eindigt deze cluster steeds bij dezelfde standaard. Ship nooit code die je niet snapt: als je een stuk code niet aan een collega kunt uitleggen zonder naar de AI te wijzen, hoort het niet in je repo. En houd je leesspieren getraind, want je vindt de bug niet als je de code niet schreef. Debugging-instinct is opgebouwd uit duizenden keren zelf schrijven en zelf lezen, en dat verdampt sneller dan je denkt.

Geen van deze regels is nieuw. Ze golden ook toen code nog met de hand werd getikt. AI heeft ze urgenter gemaakt, omdat de schaal waarop je ze kunt overtreden is geëxplodeerd. Vroeger begrensde je typsnelheid hoeveel onbegrepen code er per week in je repo kon belanden. Die rem is weg en er is niets automatisch voor in de plaats gekomen. De vervanging moet uit je proces komen, en dat is precies wat de stukken in deze cluster proberen te bieden.

Waar dit raakt aan de workflow

Kwaliteit begint eerder in de keten, bij hoe je een agent aanstuurt. Een goede spec, kleine stappen en review als vaste poort voorkomen meer ellende dan welke linter ook. De volledige werkwijze staat in de gids over agentic coding, hieronder bij de verwante onderwerpen.

Hieronder eerst drie startpunten, daarna alle stukken uit deze cluster, nieuwste eerst.