Humans hold the vision and do the validation. In the middle, agents do the implementation.
Until now, a human's attention was mostly in the middle: turning intent into code, line by line.
With agents doing the implementation, that attention moves outward. To one side: defining what should be implemented. To the other: making sure what was implemented is correct.
How will I know the code is any good?
There are two different questions hiding in there.
Answered by a validation strategy, and only a human can provide it.
Validation ↓Answered by the structure of the codebase: the garden work.
Structure ↓The answer to that question is something the human has to provide. It isn't in the code, and an agent can't invent it. So the human creates a validation strategy.
That strategy becomes the acceptance criteria: the bar the agent climbs to in its agentic loop. Implement, check, fix, repeat, until every rung passes.
It's more than unit tests. It might include manual testing, integration with other systems, or deployment to an alpha channel.
Duplication creates drift surfaces: two copies of the same rule that are supposed to agree. Today they do. Then one of them changes.
Nothing fails today. But the codebase is now less safe to change, and every agent that reads it learns two contradictory versions of the truth. At agentic speed, drift compounds fast.
const MAX_ITEMS = 50; function canOrder(cart) { return cart.items.length <= MAX_ITEMS; }
const MAX_ITEMS = 50; function isValid(order) { return order.items.length <= MAX_ITEMS; }
Two copies of one rule…
This is the garden structure work. Instead of hoping each change is good, shape the codebase so bad changes can't be expressed: make illegal states unrepresentable.
type Order = { status: string; paidAt?: Date; trackingNo?: string; }; // "shipped", never paid, no tracking number: const o: Order = { status: 'shiped' }; // compiles
type Order = | { status: 'pending' } | { status: 'paid'; paidAt: Date } | { status: 'shipped'; paidAt: Date; trackingNo: string }; const o: Order = { status: 'shipped' }; // ✗ Property 'trackingNo' is missing
An agent can't take a wrong turn the structure doesn't allow, and neither can a human.
The codebase has to be set up for this, and then continuously refactored to deal with the entropy that comes with growth. The trellis bends under fruit; new beds need new irrigation.
Refactoring isn't a rewrite. It's the human's structural work, carried out with agents:
Agents implement. Humans decide what should exist, define how we'll know it's right, and shape the codebase so that building it well is the easy path.