I build software with coding agents, and I build the agents themselves.
Most of the code I ship today is typed by an agent; my part is everything around it — the rules it follows, the tools that let it see the running system, and the checks that decide what ships.
Before agents I spent thirteen years writing backends by hand: payments, ad-tech, data platforms, distributed systems — in product companies and consultancies, small teams and large, remote and on-site.
That is what I lean on now: knowing what good code looks like is what makes an agent’s code worth keeping.
Distributed, async teams are where I do my best work.
Mentoring, writing, and sharing what I’ve learned — that’s why this blog exists.
How I build
With agents, inside a harness. An agent is as good as what it can see. I give mine the logs, the traffic and the errors of the stack it is changing — procdeck started as exactly that — and rules written down in the repo instead of repeated in chat.
Agents in products. A loop with tools, memory and a hand-off to a human, a cheap classifier before any chat model, and evals on real scenarios before a prompt or model change goes out.
More on that in a chat is an agent with a human inside the loop.
Types as guard rails. TypeScript and Effect put errors, dependencies and resources into the types, so agent-written code is reviewed, not just trusted.
Go where one binary is the point — that’s how procdeck ships.
Small, transparent pieces. Event-driven systems and serverless: functions, queues and tables you can see, rather than infrastructure hidden inside a container.
Automation is the habit behind all of it — my open source started the same way: a deploy tool, a typed AWS SDK, a Telegram bot SDK, a dev-process manager.