Writing.
Notes on product systems, the reality of applied AI, and how state shapes software.
When the Measurement Is the Bug
Evaluating a candidate system against one already in production, the hard part was never the thing being measured. It was three numbers that looked healthy and described a different experiment than the one intended.
Read more →Human-in-the-Loop Isn't Going Away
When an AI system is accurate enough for the demo but you still can't remove the person, the missing piece isn't the model — it's who carries the cost of being wrong, and whether the system routes by that cost.
Read more →When to Extract a Shared Component
Extraction is a bet that a shape is stable — not a rule about counting to three. The third copy just happens to be where you finally have enough evidence to judge.
Read more →One Component Library, Three Applications
What changes when three apps depend on the same components, and why the components turn out to be the easy part.
Read more →Making Change Cheap
The most expensive part of software is changing it after it ships. What that costs teams, and how good systems keep each next change small.
Read more →Every System Eventually Wants to Become Configurable
Why configuration eventually replaces code, and the cases where reaching for it makes things worse.
Read more →Serving Many Brands from One Codebase
Serving many brands from one codebase without forking. The hard part is deciding where configuration ends, not picking a theme.
Read more →The Hidden Cost of Exceptions
A single special case is cheap. The tenth is what quietly makes a system unmaintainable, and the bill stays invisible until it isn't.
Read more →The problem is almost never the model
When a computer-vision system underperforms, the fix is usually in the data, not the model.
Read more →Measuring Latency Honestly
Why averages flatter the truth, what percentiles fix, and how to keep a fast metric from quietly becoming a wrong one.
Read more →Why "Just Add a Flag" Eventually Fails
A feature flag is a great way to defer a decision and a bad way to avoid one forever. Flag sprawl is usually a missing model in disguise.
Read more →Schema-Driven Forms: When Rules Become Data
Business rules scattered through components age badly. How schema-driven forms move them into data and open the door to configuration.
Read more →Why AI assistants forget decisions
It looks like an AI problem. It's really a state-management problem on a new surface: a single source of truth, records over logs.
Read more →What Computer Vision Taught Me About Software Engineering
Lessons from applied computer vision that turned out to be lessons about software in general.
Read more →