Journal
Posts and long-form series on AI, startups, venture capital, and more.
All Posts
The Whole UI Is a Hashtag
Pedal Wrencher's most-used feature is a hashtag in a Strava activity title. On designing an interface inside someone else's text field.
How Date Inference Works, and Why Ambiguity Is the Problem
Guessing a strptime format from examples is a scoring problem with ties. The dangerous outputs are the wrong guesses that still parse cleanly.
Bounded Autonomy: Retry, Escalate, Never Go Silent
Every stage of an automated pipeline needs three outcomes, not two. Why automation's usual failure mode is doing nothing unnoticed, and how to design it out.
Your API Is Already an MCP Server
Emit's MCP server is an endpoint inside the existing FastAPI app, not a separate package. Why in-process beats a sidecar for a small API-first product.
Bradley-Terry: Maximum Likelihood Ratings on an Elo Scale
Bradley-Terry fits every comparison at once instead of nudging after each game. Adding it to elote, and the four design choices that made it usable next to Elo.
Five Backtest Invariants Worth Enforcing In Code
A backtest simulates information availability, and every way it leaks the future flatters your returns. Five invariants, each with the test that pins it.
Evergreen 1.7 Lets the Phone Do the Work
Evergreen 1.7 turns the iPhone from a place you look things up into a place you actually get things done, plus a handful of fixes worth having.
Same App, Ten Years Apart
Pedal Wrencher in 2015 and in 2026: identical product, zero shared code. What a decade of stack turnover actually bought, and what it didn't.
PyGeoHash v3.3.2: Reliability at the Edges
PyGeoHash v3.3.2 continues the reliability run with antimeridian fixes and stricter validation, plus native ARM64 wheels and smoke-tested artifacts.
Summer Reading List 2026
Summer reading on wisdom, land, higher education, and a return to the Hitchhiker's Guide, plus finally finishing a book I started ages ago.