Blog · 6 articles
Working notes from the edge of the toolchain
Essays and deep dives — written after shipping the thing, not before.
Everything else
Write the eval first
Prompt engineering without an eval is just vibes with extra steps. Here's how to build a scoring harness in an afternoon, and why twenty examples beat two thousand.
The cache you think you have
Your hit rate is 4% and you can't see why. A field guide to the invalidations nobody writes down — in HTTP caches, in Postgres, and in LLM prompt prefixes.
Types that earn their keep
Most TypeScript adds ceremony without removing bugs. Four patterns that make illegal states unrepresentable instead of merely annotated.
Streaming is a state machine, not a string
The token loop is the easy part. Reconnects, partial JSON, backpressure, and the abandoned-request problem are where streaming implementations actually break.
Postgres is probably enough
Before you add Redis, Elasticsearch, a vector database, and a queue: Postgres does all four adequately, and 'adequately' is the correct target until it isn't.