Blog

The Abstraction That Leaks

Every useful abstraction hides the layer beneath it — until the day it can't. The ones that serve you longest aren't the ones that hide the most, but the ones that fail honestly when the thing underneath breaks through.

Wait for the Third Case

The wrong abstraction is more expensive than duplication, because it's harder to reverse. Which is an argument for waiting — abstracting on the third occurrence, not the first, when you finally know which parts actually vary.

Normal Is a Measurement

A number from production means nothing until you know what that number usually is. The hardest part of observability isn't collecting metrics — it's knowing what normal looks like, because 'bad' is defined entirely by contrast with a baseline you had to measure first.

The Incident Is Already Over

By the time you're looking at an incident, the state that caused it is usually gone. Debugging production is forensics on a scene that's already been cleaned up — which is why what you captured while it was happening matters more than how hard you look afterward.

The Question You Didn't Instrument

In production you can only answer the questions you decided to measure in advance. The most useful metric is almost always the one someone added before anyone needed it — and the worst incidents are the ones where the data you'd want simply doesn't exist.

The Expand-Contract Migration

A schema change and a code change can't deploy at the same instant. Expand-contract accepts that and makes the intermediate state — where both old and new must work — the thing you design for.

The Flag That Outlived Its Change

Feature flags are what make progressive rollout and safe migration possible. They're also the debt those techniques quietly accumulate — and the flag you never delete is the one that decides your incident for you.

The Rollout Is the Test

No test environment fully reproduces production. That's not a gap to close — it's a fact to design around, which means the rollout itself has to be the final test, run against real traffic in a way that limits what a failure costs.

The Accidental Interface

The interfaces you have to keep stable aren't just the ones you designed. Anything observable becomes something someone depends on — including the details you never meant to promise.

The Compatibility Contract

The moment another system depends on your interface, the interface stops being yours to change freely. Backward compatibility is the contract you signed without reading it, and breaking it breaks things you can't see.