Working With Coding Agents Without Losing the Plot
A coding agent will happily produce three hundred lines for a request you spent nine seconds writing. Whether that is a good trade depends almost entirely on how the request was framed.
The teams getting real value out of these tools are not the ones with the best prompts. They are the ones who have worked out which problems to hand over in the first place.
Scope the task, not the outcome
The failure mode is asking for a result and leaving the path open. "Make the checkout faster" invites the agent to guess at intent, and it will guess plausibly and wrongly.
A well-scoped task names the boundary:
- Which files are in play, and which are off limits.
- What "done" looks like, in terms someone could check.
- The constraints that are not negotiable — a public API that cannot change, a dependency you are not adding.
If you cannot write that boundary down, the task is not ready for an agent. It is usually not ready for a human either.
Context is a budget, not a bucket
It is tempting to give the agent everything and let it sort things out. That works until the relevant detail is competing with forty files of noise, at which point quality drops in ways that are hard to attribute.
Treat context as something you spend deliberately:
- Point at the two or three files that actually matter.
- Include the interface a change has to satisfy, not the whole module behind it.
- Prefer a short, current description over a long, stale one.
Long sessions decay for the same reason. When a conversation has accumulated abandoned approaches and superseded decisions, the useful signal is buried. Starting fresh with a clean statement of the problem is often faster than pushing through.
Review the diff, not the explanation
Agents are fluent. The summary of a change will read as confident whether or not the change is correct, which makes the prose actively misleading as a review signal.
Read the diff. Specifically, look for:
- Invented APIs. Methods that ought to exist and don't.
- Silently widened scope. A refactor that arrived alongside the bug fix you asked for.
- Dropped edge cases. The empty array, the failed request, the second click.
- Tests that assert the implementation rather than the behaviour, and so pass no matter what.
The last one is worth dwelling on. A test written against the code that was just generated will confirm that code does what it does. That is not evidence it does what you wanted.
What agents are good at
Worth handing over:
- Mechanical changes across many files, where the pattern is clear and the risk is low.
- Filling in a shape you have already defined — the sixth endpoint that looks like the other five.
- Exploratory work you intend to throw away, where being roughly right quickly beats being exactly right slowly.
- First drafts of tests for code whose behaviour you can state precisely.
What they are not
Worth keeping:
- Decisions with long half-lives. Data models, module boundaries, anything the rest of the system will be built on top of.
- Work where the hard part is deciding what to build rather than building it.
- Anything you could not review honestly. Generated code you do not understand is a liability with a delay on it.
That last point is the one that bites. The cost of an agent is not the tokens, it is the review. If a change is too large or too unfamiliar to review properly, accepting it means carrying code nobody in the team understands.
Wrap-up
The useful mental model is not "autocomplete for functions" and not "junior engineer" either. It is closer to a fast, tireless collaborator with no memory of yesterday and no stake in tomorrow.
Give it bounded problems, spend context deliberately, and review what comes back as though a stranger wrote it. The speed is real, but it accrues to people who stayed in a position to judge the output.