Writing
Thoughts on building software that lasts, AI that actually helps, and lessons from two decades of production code.
2026

I Put 358 Things in a Human Review Queue. I Reviewed Five.
A 358-item queue produced five reviews. Human judgment belongs on authorship and consequential memory decisions; copy checks can run first.

I Ate Fish Once. That Wasn't a Preference.
One fish dinner became a standing preference. Derived memories need their sources and review state to survive into later requests.

The Model Call Was Logged. Its Cost Was Blank.
A logged model call can still have an unknown cost. Route labels, token counts, fallback calls, and unpriced requests make the gap visible.

Don't Fire Your Cron Jobs
A scheduler decides when work runs. Whether that work needs a model is a separate decision, with different tests and controls.

Guardian Restored an Older Version of My Work
Guardian came back after a database failure, but two recent rewrites did not. A restore test needs to check which versions returned.