The bundle you didn't mean to ship
Nobody decides to send 400kB of JavaScript to a phone on a train. It arrives one reasonable-looking import at a time, and the only way to stop it is to make the cost visible.
Frontend4 min read
Blog
Working notes on things I had to figure out — bundle budgets and Server Components, idempotency and observability, content models that editors actually use, and where LLM cost really goes.
Nobody decides to send 400kB of JavaScript to a phone on a train. It arrives one reasonable-looking import at a time, and the only way to stop it is to make the cost visible.
Frontend4 min read
Retries are not an edge case — they are the normal operating condition of any network. Designing for them turns a whole category of duplicate-record bugs into something that cannot happen.
Backend4 min read
Most confusion about RSC comes from thinking of it as rendering. It's closer to serialisation — and once you see it that way, the rules stop feeling arbitrary.
Frontend3 min read
Going headless solves a rendering problem and creates an editing one. Most of the disappointment comes from taking the frontend away without giving anything back.
CMS4 min read
Most teams try to cut their model bill by picking a cheaper model. In my experience the savings are almost never in the model — they're in the context you were sending it that it never needed.
AI Training3 min read
A CMS schema is a contract between engineers and editors. The difference is that when you get an API wrong, tests fail — when you get a schema wrong, people quietly stop using it.
CMS3 min read
Most logging is written as if a human will scroll through it during an incident. Nobody does. The question a log line has to answer is whether you can find it at 3am when you don't know what you're looking for.
Backend4 min read
Every Shopify build eventually faces the same fork: stay in the theme, or go headless. Getting it wrong is expensive in both directions, and the deciding question isn't technical.
CMS3 min read