A fifteen-minute visual digest
Engineering in a compressed loop.
The distance between an idea and running code shrank from weeks to minutes. The loop did not disappear. It compressed, and everything that used to hide inside the slow part is now on the surface: judgement, verification, and taste. This digest covers how to work well in that loop, and why the craft is worth more than it has ever been.
Presenting? J next chapter, K previous, C contents.
Release loop. Quarters, then sprints.
CI loop. A build per commit, daily deploys.
Agent loop. Brief to diff in minutes.
The loop got shorter. The thinking did not.
Every engineering loop has the same four beats: decide what to build, build it, check it, learn from it. For most of our careers the build beat was the slow one, so it hid the others.
Agents collapsed that beat. A change that took an afternoon now takes minutes, and you can run it ten times before lunch. What did not compress is the part that decides whether those ten runs were any good: understanding the problem, reading the result, and knowing when to say no.
So the bottleneck moved. It used to be how fast you could write a correct solution. Now it is how fast you can recognise one. That is a different skill, and it is what the rest of this digest is about.
Start from what is true, not from what is usual.
An agent is a superb pattern matcher. Ask it for a retry and it reaches for the most common retry on the internet. That is habit, at machine speed.
First-principles thinking is the counterweight. Before choosing a solution, reduce the request to the few things software is actually made of: data that must stay true, time and ordering, failure, and the people who read and run the system. Then build up from there.
With agents this matters more, not less. A model will produce a fluent answer to the wrong question. Four questions catch most of the expensive mistakes before any code gets written. Pick a request.
Habit gives you the common answer. First principles give you the right one for this system.
Software is half science, half art.
The science half is what you can prove: a test that fails before the fix, a load profile, an invariant, a hypothesis you tried to break. The art half is what you can only judge: names, boundaries, what to leave out, how a change will read to the next person.
Agents are strong at the science when you ask for it. They will produce evidence on demand. They are weaker at the art, because taste is not in the average of their training data. It lives in the specific choices your team made, and in the reasons behind them.
Too far in either direction and quality falls. Drag the slider to see what each extreme feels like to work in.
What you can prove
Falsifiable claims about behaviour. Run them, repeat them, compare them against a baseline.
- 01red test before green
- 02load profile at real volume
- 03invariant enforced by the database
What you can judge
Choices with no single right answer, which still decide whether the code survives its second year.
- 01a name that explains intent
- 02a boundary in the right place
- 03the feature you chose not to build
How would you do this work?
Ask that before you write a single instruction for an agent. If you cannot explain how a senior engineer would approach the change, no prompt will explain it for you.
The answer lives on a small shelf of books that used to pay off slowly, one design review at a time. Now every principle you can put into words becomes a line in a skill, and that line runs on every task an agent touches. Their value went up when code got cheap, roughly tenfold.
Read them in this order. It climbs from one function to a whole organisation, the same path pressure travels through a real system.
The model listens now. So what you write is the work.
Two years ago prompting meant coaxing: you repeated yourself and hoped. Today’s models hold a written system across hundreds of steps, made of rules, a way of thinking, and the values that settle ties.
That moves the leverage. A clever line buys you one good answer. A coherent system buys you consistent behaviour on tasks you have not seen yet. Good systems have three parts: a Law (a short set of rules grouped by concern), a Bar (what a result must clear before it counts as done), and Field sense (how far beyond the edited file the agent has to look).
What to do
Concrete steps, done-criteria and stop conditions. Agents follow these almost literally, which is exactly why vague ones are dangerous.
- e.g.write the failing test first
How to think
Heuristics the agent can apply to new cases. They generalise where instructions cannot.
- e.g.fix at the lowest level that owns the fact
What to protect
The tie-breakers. When the plan and the code disagree, values decide what happens next.
- e.g.no claim without a check run this session
Field sense, five levels
1. The user’s words 2. The repo’s conventions and decision records 3. The Law (complete, restrained, honest) 4. Habit (what the model would do by default)
An agent knows exactly what you wrote, and nothing else.
Context is a budget, and one session spends it badly.
Every file read, failed attempt and stack trace stays in the window. After enough turns, the rule you wrote at the start is competing with forty screens of noise, and it loses.
Three things drive this. Attention is uneven, so material in the middle of a long context gets less weight than the start or end. Failed attempts teach the model the wrong patterns, because it sees its own mistakes as precedent. And compaction keeps a summary, which is lossy by design.
The fix is structural, not verbal. Give each concern its own fresh session and pass only the result forward.
A written brief keeps the main session clean.
A subagent starts with nothing. The brief is the only world it has. Write the brief well and the subagent does focused work in its own window, then returns thirty lines instead of three hundred.
That is what metaprompting means in practice. The main session does the recon, then writes a prompt for another agent. The main session keeps the facts and the decisions. The subagent keeps the mess. Full output goes to a file on disk, so nothing depends on remembering a conversation.
One sentence: what changes and why.
An observable check, not a feeling.
Exact files and symbols, not a folder.
Each marked verified or unverified.
What is settled and not up for debate.
Scope, budgets, what must not move.
The second caller the ticket forgot.
When to stop and ask instead of guessing.
A short handoff, with the full output in a file.
Refactor the sync worker to be more robust. Follow best practices and add tests.
Which worker? Robust against what? “Best practices” rules nothing out.
Objective: make order-sync retries idempotent (duplicates since v4.2). Done means: a test replays one message twice and one row results. Read first: sync/worker.ts#handle Known: a nightly job also writes orders (verified). Trap: rows written today outlive the code. Return: 30-line handoff, plan in .work/01-plan.md
Before you send it, reread the brief as if you were the subagent. For anything you would get wrong with only that text, add one line.
Too many agents in a row is a game of telephone.
If one session is too crowded, the tempting fix is a chain: analyst, architect, planner, builder, reviewer. Each gets a clean window. Each also gets a summary of a summary.
Two forces pull against each other. More sessions give each agent more headroom. More handoffs lose intent every time. At ninety percent kept per handoff, four handoffs keep about two thirds of what you meant. Drag the sliders. The best point is usually a small number of owners, each of whom re-reads the code rather than trusting the agent before them.
- 01
Every handoff is a compression.
A thirty-line reply cannot carry everything its author saw. The second caller and the flag that defaults to off are the first details to fall out.
- 02
Nobody owns the plan.
When the builder finds the plan is wrong, the planner is gone. An owner who can both plan and attack the plan fixes it in place.
- 03
Long sequential runs drift.
Ten back-to-back sessions on one feature each start from the last handoff, not from the code. Drift compounds quietly until a human reads the diff.
A build skill: two agents, one brief, no telephone.
Here is one shape that works. An orchestrator with Staff-level judgement does the recon himself, writes two briefs, reads two handoffs and closes. He never edits production code, so he has no attachment to any diff.
The pairing is the design. Author and critic share one context, so nothing is lost between them, and a forced change of hats keeps the critic honest. Two loops are bounded on purpose: one plan revision, two defect loops, then stop and report.
Judges
Sizes the task, runs focused recon, writes the briefs, gates the plan, and closes in a fresh shell.
- OUTrecon file and a 20-line report
Plans, then attacks
Re-verifies recon, weighs two or three approaches, picks the smallest complete one, then tries to break it as if a respected colleague had written it.
- OUTREADY · RISKS · BLOCKED
Builds, then reviews
The only role that edits code. Writes the failing proof test first, matches the neighbours, then mutation-tests her own lines.
- OUTred to green, mutations caught
| Size | When | What changes |
|---|---|---|
| Small | One module, no contract change | Short recon, light plan review, proof test still required |
| Standard | Several files, one service | Full recon, plan attacked before build, mutation check |
| Deep | Auth, migrations, schemas, events, public contracts, cross-repo | Blast radius mapped beyond the repo, rollback written before the build |
1Recon
Make the briefs true.
Gates, premise, target symbols, closest neighbours, invariants, blast radius, and the traps the ticket forgot. Each fact marked verified or unverified.
2Plan
A plan that survived its own author.
One revision allowed. The proof test must be able to fail today, or it proves nothing.
3Build
Red, then green, then mutation.
Existing tests are read-only. If breaking a new line keeps the suite green, the tests were hollow.
4Close
Deterministic and cheap.
Fresh shell, baseline comparison, scope check on git diff --name-only, and a sweep for .only and weakened assertions.
An audit skill: a bug hunt that tries to disprove itself.
The build skill builds. The audit skill reads. It runs the suite for a baseline, states the system’s invariants in its own terms, splits the codebase into three to ten vertical scopes, and investigates each one in isolation.
Its value is the discipline around false positives. A finding needs a real trigger, a traced path with line numbers, and a named attempt to disprove it. Then a second, independent pass tries to kill it again. What survives is a short list of real pressure points. That is what you need to plan a refactor before it turns into an incident.
Recon
Run the suite, record the baseline
Invariants
This repo’s rules, cited
Scopes
Vertical slices along real seams
Investigate
Isolated, parallel or one by one
Disprove
Second pass, from report files only
Fix
One finding, one failing test, one diff
Regress
Whole suite against the baseline
Report
Including what was left alone
### [SECURITY] role check fails open on token refresh File: auth/middleware.ts:88 Trigger: expired token + refresh race, second request Evidence: catch block at :91 calls next() with no user Disproof attempt: route guard in router.ts:40 only runs on initial load, not on refresh Status: confirmed Proposed fix: return 401 in the catch, no refactor
An example finding written for illustration, in the audit skill’s report format.
Think in agents to find the pressure points.
Every system has a few places where a small mistake costs a lot. They sit at every level, from the bits on disk to the pixels on screen, and they converge on a handful of vertically integrated paths.
Each level needs its own probe and its own agent. And each needs your instruction about how much is enough, because an agent left alone will either skim a layer or gold-plate it. Pick a layer.
Dots show the cost of one mistake at that level. Cost rises the lower you go, because data outlives the code that wrote it.
QA deserves the same attention as the feature.
For years, features got a brief, a design, a review and an owner. Testing got whatever time was left on Thursday. In a compressed loop that habit breaks, because code now arrives faster than confidence does.
So treat verification as feature work. The test strategy, the load profile and the user journeys are deliverables with a brief, an owner, a review and a definition of done. If you would not ship a feature without a plan, do not ship a test suite without one either.
| Gets | Feature | Quality |
|---|---|---|
| A written brief | yes | yes |
| A named owner | yes | yes |
| Design review | yes | yes |
| Definition of done | yes | yes |
| Time in the estimate | yes | yes |
QA is also where parallel agents pay off most, because the runs are independent. One agent writes and runs a k6 load script. Others walk user journeys in a text browser, which shows the page the way a screen reader and a crawler see it, and turns UI into plain text an agent can diff between releases. Another checks accessibility. Each one writes a report file, and a single pass merges them.
Explainers from the same source
Generate short animated explainers of a flow from the domain map and the reports: what calls what, where the retry lives, what the last load test showed.
The strategy, made watchable
The same material, cut for QA: which journeys are covered, which pressure points have probes, which reports are stale. Two minutes of video beat a forty-page plan nobody opens.
Never under. Never over. Fit the problem.
Agents make both failures cheap. The under-built change passes its test and forgets the second caller. The over-built one adds a layer with one caller and an option nobody asked for. They are the same failure: a change that does not fit its problem.
The cure is to build testfully, which is different from building with lots of tests. Write the one test that fails before the fix and passes after, at the lowest level that can see the bug. A suite that never fails proves nothing, and a thousand generated assertions are bloat, not safety.
fix lands where the symptom showed one caller updated, siblings not error path is "log and continue" migration assumes today’s data
BaseManager with one subclass a config flag nobody asked for a dependency to save twenty lines diff far larger than the problem
Write down your taste, then keep it alive.
An overloaded skill reads like a policy binder. The agent tries to satisfy all of it at once and satisfies none of it well. A good skill is small, specific to your department’s needs and values, and written in your team’s own words.
Write values first, heuristics next, steps last. Then let real failures grow it: every time review catches something the process missed, add one line under Lessons. Cohesive, simple, evergreen software comes from guidance that stays the same way.
400 lines. Every framework rule, every style preference, three contradicting examples, no order of precedence, no stop condition.
The agent averages the rules, so you get the midpoint of everything.
Values (5 lines) Heuristics (10 lines) Steps with stop conditions Lessons: one line per real miss
Short enough to follow every time. Specific enough to be yours.
Docs that hold
When you brainstorm a feature with an agent, it fills gaps with plausible inventions. The cure is a map it can read in one pass, not a three-level wiki it has to summarise. Keep one high-level domain map: each domain, what it owns, and what it depends on. Detail stays in the code, where the agent should be reading anyway.
The second version costs ten times the first
The first version of a good skill is an afternoon’s prompt. The version worth sharing comes from running it on real tasks, reading what broke, and writing down why. Most of that time is understanding: failure analysis, explainers, documentation, QA on real repositories, and keeping the domain map and architecture intact so future brainstorming stays grounded.
The tooling takes a hundred hours. Judgement takes a career.
Fifty hours of study and fifty hours of practice will teach you subagents, skills, briefs, MCP and hooks. That knowledge is real, and it plateaus quickly.
The part that keeps growing is the ability to evaluate what comes back, and to write your taste down precisely enough that an agent can apply it. That is worth roughly ten times the tooling, because it decides whether this week’s hundred fast diffs are an asset or a liability. It comes from the shelf in chapter four, from production incidents, and from years of reading code with care.
Ten lines to return to
- I reduce every request to data, time, failure and people before choosing a solution.
- I keep the science and the art in balance, and I name which one I am using.
- I can explain how a senior engineer would do the work before I ask an agent to.
- I write systems for agents, not one-off prompts.
- One session, one concern, one reviewable diff.
- Few owners who re-read the code beat long chains of handoffs.
- Every finding must survive an attempt to disprove it.
- Quality work gets the same brief, owner and review as feature work.
- I fit the change to the problem, and I prove it with one honest test.
- The code, the bugs and the architecture are mine.
Closing
The craft got more valuable.
Agents made typing cheap. That makes judgement, taste and the ability to explain both the most valuable things in the room. Software is still half science and half art, and the loop just got short enough to show it.