Loop engineering is having a moment. Scroll through any technical forum and you will find voices arguing that we should stop treating AI agents like chatbots to be coached with clever prompts. Instead, they say, we should design loops: autonomous cycles that let an agent plan, execute, check its own work, and iterate while we sleep. The pitch is seductive. If the loop is well constructed, the agent stays on track without constant human supervision, turning raw intent into finished output overnight.

That promise works beautifully in theory. In practice, most agents already loop. They generate code, inspect compiler errors or test failures, patch the code, and run the suite again. That basic feedback cycle is not new. What proponents are calling for now is something more ambitious: an outer loop that governs the entire task, not just the syntax errors. Building that outer loop is where things get difficult, because software engineering is rarely a closed system with fixed rules.

The Loop Design Problem

Product goals are messy. You rarely start with a perfect definition of done. More often, you discover the real goal while you are elbows-deep in the build. A requirement that sounded straightforward on a whiteboard turns out to have edge cases that change the shape of the solution entirely. When you wrap an agent inside a rigid loop, that rigidity becomes a liability. The loop keeps hammering at a target that might be the wrong one. Worse, a flexible loop sometimes solves the deadlock by quietly changing the goal to match whatever output it managed to produce. Neither outcome is useful. One wastes compute; the other ships garbage confidently.

The deeper issue is specification cost. If you want a loop to run unsupervised, you must write a spec that anticipates nearly everything. What exactly should the agent change? What existing behavior is sacred and must be preserved? Under what precise conditions should the agent stop iterating? Which risks are acceptable, and which side effects should trigger an immediate halt? Writing that document can take longer than simply sitting with the agent and steering it through the task in real time. You are paying a heavy upfront tax in exchange for automation that only pays off if the verification is dramatically cheaper than the doing.

Where Loops Actually Earn Their Keep

That does not mean loop engineering is useless. It means it is a specialized tool, not a universal strategy. Loops shine when verification costs compound and success criteria are unambiguous. There are three places where this tends to hold true.

Routine mechanical work. Think of the tasks that make senior engineers want to retire: starting applications in a specific sequence, clicking through a deployment UI to confirm each stage, grepping logs for known error strings after a release, or validating that a configuration file was written to all the right nodes. These steps are tedious for humans but trivial to verify. A loop can babysit the process, checking health endpoints after each restart and rolling back at the first sign of smoke. The human still defines the rollout plan. The loop simply executes it with the patience of a machine at two in the morning.

Measurable optimization goals. When success is a number, loops are devastatingly effective. Lower p99 latency below 150 milliseconds. Reduce memory footprint by twenty percent. Migrate a hot path from Python to Rust and ensure all existing unit tests still pass. The loop can generate a change, benchmark it, keep the variant that moved the needle, and discard the rest. Because verification is automated and the search space is large, the compounding cost of manual review would make this work impractical without a loop. The target is fixed. The path is unknown. That is the sweet spot.

Operational playbooks. Incident response and support tickets often follow patterns that humans have already figured out. A specific class of production error always requires rotating a credential and clearing a cache. A category of support request can be resolved with a refund when three specific conditions are met. A loop can watch for those triggers and execute the playbook, escalating only when the pattern breaks. It does not decide that the playbook is correct; it merely enforces consistency at a scale and speed that on-call engineers cannot match.

Regulators, Not Reference-Setters

Er ontbreekt een cruciaal onderscheid in veel van de huidige discussies. Loops zijn regulatoren. Ze houden een systeem in lijn met een vooraf bepaald doel, net zoals een thermostaat een kamer op tweeëntwintig graden houdt. Maar de thermostaat kiest die temperatuur niet zelf. Iemand moest eerst beslissen dat dit de juiste temperatuur was.

Toegepast op software betekent dit dat een agent binnen een loop de hele dag door bugs kan oplossen, functies kan refactoren of parameters kan afstemmen. Het kan echter niet beslissen welke feature de klant daadwerkelijk helpt, of of een bug het waard is om opgelost te worden vóór de volgende release. Die keuzes vereisen oordeelsvorming over de zakelijke context, de pijnpunten van de gebruiker en strategische prioriteiten. Agents voeren uit. Mensen beslissen. Het verwarren van deze twee is de reden waarom teams eindigen met prachtig geoptimaliseerde systemen die het verkeerde probleem oplossen.

Loop engineering is nuttig, maar het is beperkt. Het helpt je om de machine met discipline en snelheid te laten draaien. Het beslist niet welke machine er gebouwd moet worden, voor wie deze is, of hoe succes er in menselijke termen uitziet. Het oordeel over welke feature belangrijk is, welk risico acceptabel is en wanneer het doel zelf moet veranderen, ligt bij jou. Bouw loops voor het werk dat je al goed genoeg begrijpt om het automatisch te kunnen verifiëren. Houd zelf de controle over de rest.


Dit artikel is gebaseerd op ideeën die oorspronkelijk zijn besproken door Isaac Hagoel in “Loop Engineering Minus The Hype.” Voor meer discussies over engineering, meld je aan bij onze leercommunity op Telegram.