Writing
Notes on payments infrastructure, distributed systems, and the startup that didn't make it — plus the dev tools and ~30 books a year that fund the rest. Written down so I don't have to learn it twice.
Deterministic guardrails for AI-written code
A new approach: as an agent writes more of the code, careful review stops scaling. So I encode each standard — strict types, architectural seams, structure caps — as a mechanical check the model can't talk past — enforced at every layer, from the agent's own AI hooks down to CI.
Read postDesigning a dead-letter queue you can trust
In payments the interesting question isn't what happens when a message processes — it's what happens when it can't. Poison messages, replay safety, per-aggregate ordering, and schema drift, from the financial core at DoorLoop.
11 min readIdempotency keys are a design input, not a retry hack
If processing an event twice can't equal processing it once, you don't have a queue — you have a liability. Where the key comes from, and why the check and the effect must commit together.
7 min readStripe Treasury: embedded banking without becoming a bank
What it actually takes to move customer funds — accounts, fund flows, the reconciliation you don't see — and the failure modes that decide the architecture.
9 min readSpecBite: an honest postmortem
My failed startup, with the parts I'm not proud of left in. The engineering shipped; the business didn't. Here's the difference, in detail.
14 min readI keep my reading list in git
~30 books a year, one commit at a time. Queue management, speed, retention, and what I do with the notes when a book is worth keeping.
4 min readRunning K8s for a side project (don't)
I did it so you can read about it and choose a boring Postgres box on a single VM instead. A breakdown of what the complexity actually bought me.
9 min readDDD for people who actually ship
Domain-driven design without the 500-page book. The three ideas I use every week and the rest I happily ignore.
12 min readA LitRPG engine in TypeScript
Stats, progression curves, and generated encounters as plain data. Building a narrative game engine I can actually reason about — and test.
7 min readBuilding an MCP server in an afternoon
The Model Context Protocol is smaller than it looks. I shipped a working server between lunch and dinner — here's the whole shape of it.
6 min read