Skip to content
All writing
Execution2 min read

Shipping Is a Decision, Not a Milestone

Treating a release as an experiment with consequences changes what you build, how much of it, and when you stop.


Most roadmaps treat shipping as an endpoint — the thing at the right edge of the Gantt chart where work concludes. That framing quietly determines everything upstream of it, and mostly for the worse.

If shipping is the finish line, then scope is a function of the calendar, completeness is the measure of readiness, and the release is a celebration. If shipping is instead the moment an assumption meets reality, then scope is a function of what you need to learn, readiness means "sufficient to produce a clear signal," and the release is the start of the interesting part.

Smallest thing that can be wrong

The common advice is to build the smallest thing that works. I find a sharper version more useful: build the smallest thing that can be wrong in an informative way.

A feature that can't fail visibly teaches you nothing. If you ship a change and every possible outcome is consistent with your existing beliefs, you spent the budget and bought no information. Before building, it's worth asking what result would actually change the plan — and if nothing would, either the scope is wrong or the decision was already made and this is theater.

Reversibility is the real variable

The reason to ship early isn't speed. It's that being wrong early is cheap and being wrong late is not.

This suggests sorting decisions by how hard they are to undo rather than how large they are:

  • Easily reversed — copy, layout, thresholds, ordering. Decide fast, ship, watch, adjust. Deliberating here is pure cost.
  • Expensive to reverse — data models, public API contracts, pricing, anything customers build their own workflows on top of. These deserve the slow conversation, because the cost of being wrong compounds.

Teams routinely invert this. They spend three weeks debating a button and an afternoon on a schema that will constrain them for years.

Instrument before you launch, not after

The version of this that actually costs teams money: shipping without deciding in advance what you'll measure.

Instrumentation added after launch answers questions you thought of after seeing the results, which is precisely when your judgment is most contaminated by what already happened. Naming the metric — and the number that would count as failure — before the release is what separates learning from rationalizing.

It's a small discipline. Write down the expected outcome, in a place you can't quietly edit, before the thing goes live. Then let the result mean something.

Thoughts on this?

I read every message. If something here was useful — or wrong — I’d like to hear about it.