On Shipping Early and Often
The gap between 'almost done' and 'shipped' is where most projects go to die. Here's how to close it.
Contents
Contents
Contents
Contents
I have a graveyard of unfinished projects. Side projects that were 80% done. Blog posts that were "almost ready." Features that just needed "one more thing." Sound familiar?
The gap between almost done and shipped is where most creative work goes to die. It's not a technical gap — it's a psychological one. We're afraid of judgment. We're afraid of imperfection. We're afraid that what we've built isn't good enough.
The 80% Trap
Here's the pattern: you start a project with enthusiasm. The first 80% comes together quickly. Then you hit the last 20% — the polish, the edge cases, the "nice to haves" that somehow became requirements. Progress slows. Motivation fades. A new, shinier project catches your eye.
The solution isn't discipline. It's scope management. Define what "done" means before you start, and hold yourself to that definition. If it works and it's useful, ship it. You can always improve it later.
What Shipping Actually Means
Shipping doesn't mean it's perfect. It means it's available. Someone other than you can use it, read it, or benefit from it. That's the bar.
This blog is a perfect example. I could have spent months perfecting the design, adding features, writing a backlog of posts. Instead, I built the minimum viable version and published it with a single post. Is it perfect? No. Is it shipped? Yes.
The Feedback Loop
The real magic of shipping early is the feedback loop. Once something is in the world, you learn things you never could have learned in isolation. Users find bugs you didn't anticipate. They use features in ways you didn't expect. They tell you what they actually want, which is rarely what you assumed.
Every day you don't ship is a day you don't learn.
Practical Tactics
Some things that help me ship:
- Set a deadline and make it public. Tell someone you'll ship by Friday. Social pressure works.
- Cut scope ruthlessly. If a feature isn't essential for v1, it's a v2 feature.
- Ship to one person first. Send it to a friend. Get one piece of feedback. That's enough to start.
- Accept that v1 will embarrass you. If you're not slightly embarrassed by your first version, you waited too long.
The Compound Effect
Shipping compounds. Each thing you ship builds confidence for the next thing. Each thing you ship builds an audience, however small. Each thing you ship teaches you something about the craft of finishing.
The developers I admire most aren't the ones with the most impressive side projects. They're the ones who consistently ship. Week after week, month after month. Small things. Imperfect things. But real things, out in the world.
Stop polishing. Start shipping. The world needs more imperfect things that exist, not more perfect things that don't.
More to read
engineering
I Built a CLI to Show Me What My AI-Generated Infrastructure Actually Costs
AI tools generate working infrastructure fast, but cost stays invisible until the bill arrives. I built Slate to fix that — a CLI that reads your CDK output and shows real prices before you deploy.
engineering
Building for Imperfect Systems
Why systems that accept failure build more resilient software than those designed to prevent it.
design
The Art of Less: Why Minimalism in Design Actually Works
Minimalism isn't about removing things. It's about making room for the things that matter.