Ship It Before It's Ready: How to Beat Perfectionism
The best builders ship before it's ready. The real work is the settling time after launch - the days when real usage shows you what to fix.
4 min readStartup Building & Entrepreneurship๐ Tiny Improvements
The Big Idea
Last month I saw The Tallest Man On Earth play in Asheville. He's one of the best live performers I've ever seen.
In between songs, he paused, looked out into the crowd, and said:
I've given up on trying to be perfect
Coming from someone that good, it landed hard.
The best builders I know have made the same peace. Everything ships before it's perfect. The skill is what you do in the days after - and that starts with deciding, before you ship, what "working" looks like.
Nothing we ship is perfect
We expect perfection from ourselves, so we hold things back until they're ready. Polished. Done.
But everything we ship goes live before it feels perfect. Every single thing. Shipping a feature with zero bugs after launch is beyond rare.
That isn't a failure of process. It is the process. Getting comfortable with that feeling is part of the job, and I'm not sure it ever fully goes away. (I wrote about a version of this years ago: imperfection is part of the brand.)
Imperfect isn't the same as reckless, though. Billing, auth, anything that can lose someone's data - those get the slow treatment. A big part of being a good engineer is knowing where risk is acceptable, and not mistaking confidence for competence. Everything else ships rough.
Settling time
There's an idea from control theory I keep coming back to: settling time.
When you apply a sudden change to a system, the output doesn't jump cleanly to its new value. It overshoots, swings back, wobbles a few times, and eventually settles into a narrow band around where it's going to stay. Settling time is how long that takes.
Shipping a new feature works the same way.
The first things you hear are mostly signs that people are using it: a burst of curiosity, a flurry of bug reports, a few people who love it, and a few who are loudly confused. That's the overshoot.
Then things settle, and you get to see how people actually fit the thing into their work.
For us, that usually takes a few days, maybe a week, for something people use regularly. The more users you have, the shorter it gets.
That window is your best shot at getting people attached to what you built. It's when you respond fast, and fix the bugs people actually hit - not the ones you imagined.
If you wait for perfect before you ship, you skip all of it.
How to listen during the wobble
Here's how we find out what's really going on while a feature settles:
- Watch people use it, and ask them about it. Session replays, observability telemetry, or straight-up user interviews. People will use your thing in ways you never expected. When you talk to them, ask "how did you handle this last week?" instead of "would you use this?" Leading yes/no questions just confirm what you already think, instead of teaching you what you don't know.
- Measure people using it. Log events, and build dashboards around the conversions that actually matter - not just click counts.
- Watch your error reports. They're a sign people are using your new feature, and a sign someone just had a bad time with it. Respond fast - that's how you keep early adopters happy.
Tools that give you a real-time view of usage
- PostHog for dashboards and session replays. Dashboards tell me what people are doing. Replays show me why. (Full disclosure: PostHog has sponsored my work in the past.)
- Fathom for a live visitor count. I keep it in my Mac's menu bar with Raycast. On launch day, it's the fastest way to see whether anyone showed up at all.
Get an objective read
When I ship something, I hand this prompt to Claude Code (connected to PostHog's MCP server) or PostHog AI. It forces me to state what success looks like up front, and asks for an honest answer instead of a pat on the back.
Swap anything in [BRACKETS] for your own details. Lines marked (optional) can be deleted if they don't apply.
1I shipped [FEATURE NAME] on [SHIP DATE]. It's meant to help2[WHO IT'S FOR] [DO WHAT].34Before I shipped, I decided it would be a success if5[SUCCESS METRIC, e.g. "20% of weekly active users try it within two weeks"].67The events that track it are [EVENT NAMES].89Using our product analytics, give me an objective read:10111. How many people have used it, and how does that compare to the12[NUMBER] weeks before launch?132. Has usage settled, or is it still in the post-launch spike?14Show me the daily trend.153. Who uses it most, and who doesn't? Break it down by16[SEGMENT, e.g. plan, team size, new vs. returning users].174. Where do people drop off or get stuck? Point me to18[NUMBER] session replays worth watching.195. What errors have shown up since launch that touch this feature?206. (optional) I'm also worried about [SPECIFIC CONCERN].2122Don't tell me what I want to hear. If the data doesn't support my23success metric, say so. Tell me what you'd look at next, and what24I'm not measuring that I should be.
Perfect isn't the job
The same loop works for people. Nobody is a perfect teammate, and the ones worth working with know it.
When someone gives you feedback you're skeptical of, test it like a feature: if I changed based on this, how would I know it worked? What's the cost of not changing?
Leading works the same way. Handing your team the answer is like shipping a feature and never looking at how people use it. The best leaders I know ask more than they tell, watch closely, and follow the breadcrumbs.
This week, ship one thing before it feels ready. Before you do, write down how you'll know whether it worked.
Your next deploy can survive a few rough edges. Ship it, then go find out what's real.
