Most of my recent projects were built alongside a coding agent, and the way I work with one has shifted a lot from "fancy autocomplete" to something closer to pairing with a fast, tireless, occasionally overconfident collaborator. A few habits have made the difference between it speeding me up and it quietly making a mess.
Context is the whole game
The single biggest lever is how well I set up the problem. An agent that knows the file layout, the conventions, and what "done" looks like produces something I can use; one that's guessing produces something I have to rewrite. I spend real effort up front pointing it at the right files and stating constraints plainly, because that's cheaper than untangling a confident wrong answer later.
Small, verifiable steps
I try to keep each task small enough that I can actually check it. "Add this one behavior and show me it working" beats "build the whole feature" — not because the agent can't attempt the big version, but because I can't meaningfully review a giant diff I didn't watch take shape. Tight loops keep me in control of the design instead of rubber-stamping it.
Trust, but verify
The failure mode isn't bad code, it's plausible code. Agents are very good at producing something that reads correctly and is subtly wrong, so I treat everything as a draft until I've run it. Reading the diff, running it, and poking the edges is non-negotiable — the speed only pays off if I don't blindly trust the output.
Where it shines
Where this really wins is exploration. Spinning up a rough version of an idea used to be the expensive part; now it's cheap enough that I'll try three approaches and keep the one that feels right. A lot of the projects in these notes exist simply because the cost of starting dropped to almost nothing.
This is a quick note rather than a manifesto — I'll flesh out my thoughts properly at some point.