How I Work With AI
Building software, for me, has always been iterative. I prototype a lot. I throw away a lot of code in the process. I figure out what I want by trying things and seeing what feels right. It’s closer to an artist sketching on a canvas than an engineer following a spec. The first version is going to be terrible, and I don’t care.
That’s part of why I was never a fan of TDD or spec-driven development. The idea of pinning down behavior before the thing exists feels backwards to me. I don’t really know what I want until I’ve built it badly a few times.
It’s also why AI fits into how I work so naturally. I can experiment more, faster, with less cost to throwing things away. A lot of the best ideas come from happy accidents along the way.
Working with a fast junior dev
I’ve been doing this a long time, so I know my craft. Everything I make with AI is something I could have made myself, just faster. That part matters. If I don’t know what good looks like, I can’t tell when the AI is wrong, and I can’t steer it back when it drifts.
When I prompt, I picture a junior dev who is incredibly fast but has terrible memory. They’ll get most things right, but they’ll forget context I just gave them, drift off the pattern we agreed on, and occasionally make confidently wrong choices. The quality of what comes out really depends on me. I’m the senior dev. I’m the architect. The AI is the hands.
No skills, no agents.md
I don’t use skills. I don’t write an agents.md or a CLAUDE.md or any of that. I usually set up the initial repo myself so I have a base understanding of how things are wired together and what the conventions look like. After that, the codebase itself is the context.
I’m sure there are people getting a lot of mileage out of those files. It’s just not how I work.
One feature at a time
I work on one feature at a time, the same way I would as a regular dev. I commit a lot. Small commits, often. I find this is very token-efficient — I’ve never hit a usage limit. The shorter the loop between intent and a clean state, the less you waste re-explaining where you are.
I also bounce between editors. VS Code, Opencode, Codex, Zed. They each suit a different mode. When I care about the code and want to review every change, I’ll use one. When I’m in pure vibe-coding mode and don’t even want to look at what’s being written, I’ll reach for another. The tool depends on how serious I am about the output.
For agents themselves, I only use Claude Code and Codex. I find them equally good. Different strengths, same level.
My role has changed
The whole process is agentic now. I’m not really writing code anymore. I’m directing it. I have an army of devs that never sleeps, and I’m spending my time deciding what to build, reviewing what comes back, and figuring out what to do next.
The work hasn’t gotten easier. It just shifted.