Learn Backward. Act Forward.
I had understood the mistake. That was not the same as being ready to continue.
I build software for a living — and write about the work, the traces it leaves, and who I'm becoming along the way.
The writing sorts into a handful of topics — pick the one that matches what you're after.
Concurrency patterns, performance trade-offs, and Go code you can reason about.
TDD, domain modelling, and the boundaries that make code safer to change.
Interfaces, Japanese web design, and the context behind design choices.
Latest — Beyond Minimalism: A Japanese-Inspired UX for the Web
Books, travel, identity, and the ideas that shape how I work.
Latest — Learn Backward. Act Forward.
Building production tools — codegen, transpilers, chess software — and the trade-offs each one exposed.
Latest — Beyond Unicorn: Why I Code-Gen Instead of Emulating
I had understood the mistake. That was not the same as being ready to continue.
The logs table stored trace IDs, users, token counts, latency, prompt input, model output, metadata, and variables. We used the same table to show one trace, graph cost by day, filter a feature’s recent spans, and find text a user remembered typing three weeks ago.
At 6 p.m., a client called because their production site was down.
At 6 p.m. on December 19, 2025, the product was down again.
I had a winning position against a grandmaster at the Karen Asrian Memorial Tournament.
GitHub announced stacked pull requests in public preview on July 30. The workflow is older than the announcement. Developers have built dependent branches, opened one pull request per branch, and rebased the chain by hand for years. Dedicated tools made that less painful. GitHub itself saw unrelated pull requests with unusual base branches.
After a mistake, I can lose the next move before I make it.
More by year
Some part of a mistake is always correct.