Writing
Notes from the workbench.
Engineering notes — how things get built, what the AI experiments actually taught us, and what we killed. Less strategy, more code.
- Jun 2026How little a website actually needsThis site ships one client component — a cookie banner — and 3.2KB of JavaScript. Everything else is static HTML rendered at build time. Here's what we cut and why.
- Jun 2026What a ten-agent build actually looks likeWe ran a fleet of coding agents on a build. Three independent services genuinely got three days of work in one. The producer/consumer pairs burned tokens and got redone.
- May 2026The 90-day kill switchWe had 12 experiments running and none of them shipped. Each still got the odd Friday hour, so nothing ever died. Here's the rule we added.
- Apr 2026Prompt the model like an API, not an oracleOur invoice extractor demoed clean and broke twice a week in production. It was wrong maybe 4% of the time and nothing caught it. Here's the machinery we wrapped it in.
- Mar 2026Deep-link everythingA user sent a colleague a link to the third tab of a settings page. It opened on tab one. We put every bookmarkable state in the URL after that.
- Feb 2026N role screens are one templateWe got three dashboard mockups — admin, manager, viewer. The diff between them was five capabilities. They shipped as one component and one endpoint.
- Jan 2026Grep before you design itWe designed a screen off the README and it assumed a permission that didn't exist. Now we grep the role model, routes, and base classes before sketching anything.
- Dec 2025Every integration is a translation problemBy the sixth integration we had point-to-point glue between every pair of systems. Routing everything through one canonical order shape stopped the explosion.
- Nov 2025The boring code that saves youFour invariants nobody demos: integer cents, idempotency keys, tenant_id on every query, validate at the boundary. Each one has a specific incident behind it.
- Oct 2025Stop checking roles. Check capabilities.We grepped a payroll app and found `role === 'manager'` in 14 files. Every new role was an edit across all of them. Here's what we moved to.