On shipping discipline
A few notes on what separates the projects you finish from the ones that drag on forever. Scope discipline beats velocity in almost every case.
- #process
- #writing
Most personal projects don’t fail because the work is hard. They fail because the scope quietly grows until finishing stops feeling possible.
What “shipped” means #
A useful definition: a thing is shipped when another human can use it without your direct help. Not when the code compiles. Not when you’ve demoed it. When someone else can find it, use it, and get value from it.
That standard is brutal — and clarifying.
A short table of things to cut first #
| When in doubt about… | Default to |
|---|---|
| Adding a setting | Don’t. Pick a default. |
| Adding a dependency | Don’t. Write 10 lines instead. |
| Adding a page | Don’t. Add a paragraph. |
| Adding a config var | Don’t. Hard-code it. |
When discipline breaks #
The hardest case isn’t pre-launch — it’s the week after launch, when the first user feedback arrives. You’ll be tempted to fix everything at once. Don’t.
// One change per ship. Discipline scales.
const shipDiscipline = {
smallestUsefulSlice: true,
oneChangePerShip: true,
realUserBeforeReshape: true,
};
That’s it. The discipline is mostly about saying no, often, to ideas that are genuinely good but not the next thing.