ShipAnyways ← All posts

Unfinished, Not Broken: When Known Issues Are Permission to Ship

Unfinished features are not the same as broken ones. Learn the difference, document what you know is rough, and ship anyway.

You know the work is good enough. But there's this one thing that bothers you. Maybe it's an edge case that most users won't hit. Maybe it's the UX flow that feels clunky but works. Maybe it's just code you'd rather not ship until you've cleaned it up.

So you stay up late polishing. One more pass. One more fix. One more refinement. Meanwhile the thing that actually works sits unpublished, unhelpful to anyone.

Here's what's really happening: You're confusing unfinished with broken. And that confusion is the only thing standing between your work and the people who need it.

The shipping gate: what actually blocks you

You're not blocked by a missing feature or a fundamental flaw. If it were actually broken, you'd know. You'd feel it differently.

You're blocked by a decision you haven't made yet. Not "should I ship?" You already know the answer to that. You're blocked on "what's worth fixing before I go live?"

The longer you leave that unanswered, the more you polish. The more you polish, the more new things you notice to fix. It's infinite.

Triage: sorting issues by shipping impact

Not all issues are created equal. Some will break the whole thing. Most won't.

Start here: Does this break your core promise to the user? If you said it does X, can it actually do X right now? If yes, move on. If no, fix it first.

Everything else goes into one of two buckets: ship-blocking (actively breaks the user experience) or ship-with (rough around the edges, but functional). Rough is fine. Broken is not.

Examples of ship-blocking: The payment flow crashes. Users can't create an account. The main feature doesn't load.

Examples of ship-with: The UI has inconsistent spacing. The edge case where nobody connects a thing feels awkward. It takes two clicks when one would be elegant.

Triage is fast. Five minutes, not an hour. You already know which bucket each issue lands in.

How to document known issues instead of fixing them

The move that stops the polishing cycle is this: you write it down.

Not a secret list. Not a hidden "tech debt" document only you see. A visible, honest list of what you know is rough and what you're shipping anyway.

Link it in your launch announcement. Put it in the readme. Say "here's what I know is incomplete in version 1.0, and here's what I'm focused on next."

This does two things. First, it stops the voice that says "I have to fix everything before anyone sees it." You've already named it. The secret is out. Now ship.

Second, it tells users what to expect. They see the rough edges coming. They're not surprised. And their first report isn't "the UX is weird on page 3" (which you already know), it's "here's something else we found that you didn't list."

Why momentum beats one more fix

One more polish pass costs you momentum. Not just time, though that's real too.

Momentum is the thing that keeps you moving toward version 1.1. When you ship, real people use it. Real people find things. Real people tell you what they care about. That feedback is worth more than another week of guessing.

One week of solo polish versus one day of users actually using it and telling you what matters. The users win every time.

Also, shipping builds something psychological. You crossed the line. The work is out. Now the only direction is forward. Perfectionism dies in the light. It only lives in the locked drawer.

The iteration loop after launch

Shipping imperfect work doesn't mean abandoning it. It means starting the real feedback loop.

After launch, users hit the rough edge you knew about. You already have a plan for it. You fix it. You ship the next version. The cycle continues.

What doesn't happen: you disappear into polish mode and lose momentum, users, and clarity on what actually matters.

The way you build something good is not perfection before launch. It's launch, feedback, iterate, launch again. Repeat.

FAQ

Q: Doesn't shipping with known issues damage credibility with your audience?

No, transparent shipping builds more trust than hidden polish. Users respect honesty and momentum over manufactured perfection. The credibility damage comes from promising polish and delivering delay instead.

Q: Do you need to document every known issue in your release notes?

No. Document issues users will actually hit or notice. Silent bugs, backend inefficiencies, things affecting 1% of usage don't need a public list. Transparency matters where it affects the user experience.

Q: Isn't shipping imperfect work just deferring technical debt instead of managing it?

Shipping incomplete features is different from shipping unmaintainable code. An unfinished feature can be completed. Unmaintainable code stays expensive. Ship the incomplete; never ship the unmaintainable.

Q: What if iterating on known issues takes longer than expected, and users get frustrated?

Then you reprioritize. Known issues that affect more users go first. Quick wins go first. You're not obligated to fix everything in order. Ship, listen, prioritize based on impact, and move fast on what matters. Your users will tell you what that is.


Ship Anyways is a channel of Round Table Strategy LLC, written and published by Regie Durana. Ship Anyways is a trademark of Round Table Strategy LLC. © 2026. All rights reserved.