How I decide when a design is “done enough” to ship

An illustration of a progress bar. The left side of the bar says “Start” and the right side says “Done.” The progress bar is at about 90%.

Waiting until a design feels done is how you miss the window. “Done enough” is a real standard, but it’s one most designers aren’t taught.

Here’s how I think about it.

First, I go back to what “done” was scoped to be. Not what I wish it were. Not the ideal version I keep sketching in my head at midnight. What did we say this was supposed to solve? If the design solves that problem in a way real users can navigate, that’s the baseline. Everything else is negotiation.

Second, I separate quality from completeness. These are not the same thing. A design can be high quality and still incomplete. It can also be complete without being precious about every pixel. The question I’m asking is: does this hold up under realistic use? Not perfect use. Not the happy path demo I built for the review. Realistic use, with real people, in real conditions.

Third, I think about what ships next to it. A design launching alongside solid instrumentation is a lot more “done” than one going out blind. If we can observe what happens in production and come back to fix what underperforms, the design doesn’t need to be finished. It needs to be sound. Those are different bars.

There’s also a version of “done” that has nothing to do with the design at all. Sometimes the call is: we have a deadline, the core experience works, and the things still on my list are things users won’t notice on day 1. That’s a legitimate reason to ship. Not every design decision deserves equal weight at the moment of launch.

Every time you get close, you find something that could be better. That’s part of being a designer. I’m not arguing for shipping something broken or cutting corners on quality. The trap is holding work hostage to a version of perfect that keeps moving. That’s not upholding craft; it’s chasing a finish line you’ll never reach.

Ship it. Watch what happens. Come back with data. That’s the loop.