I tend to ship things that are not perfect for a reason …
Shipping something that works and solves the problem is often better than waiting until said thing is perfect.
In other words …
Done is better than perfect.
How many times have you (or someone you know) worked on something but never shipped it because it was never “perfect”. Unfortunately, its probably more times than you can count and would like to admit …
Real World Example
I recently upgraded the visual email editor on my email marketing product, Listomo, to a block editor (see the announcement here). This block editor is very similar to WordPress’ block editor experience.
Unfortunately, the image component (where you can add an image to an email) was lacking the ability to add a link to an image. You could add images to an email, but you could not make them “clickable” so that they’d go to a URL when clicked.
Some would consider this a show stopper, buy I shipped this new editor even with this basic feature missing. I knew that I’d work on that next.
This weekend I tackled that task, but again, I got it ‘done’ but it’s not ‘perfect’.
Solving the Problem vs Perfection
I forked the existing image block for the editor I’m using and added the functionality in my own block and then released it on NPM for others to use as well.
What wasn’t perfect about it? It’s not the exact user experience I want. I wanted to be able to add the link via a modal when the image is clicked. However, due to time constraints, I decided to simply add an input box to the block where the destination url could be applied, like this:
When the editor component saves its data, it will save it with the appropriate link metadata in the JSON output. This JSON metadata is what I store and then use when I render the email when it is sent off to a list (just walk the lis of blocks and render HTML):
Is this perfect?
No.
Does it look kind of “meh”.
Yeah, I’m not too happy about it right now.
But it works.
It solves the problem and gets us past this issue, for now.
The next step is improving the UX of it, but we now have the time to do that because I’ve solved the customers problem by providing them a way to provide links to their images in their emails.
Now, we just need to iterate.
Why Done is Better Than Perfect
The reason done is better than perfect is because you’re not stuck in a perpetual loop of trying to make something perfect. In other words …
You can ship.
The Pareto principle states that 20% of the effort will yield 80% of the results. I find this to be fairly accurate.
What you’ll find is that the last 20-30% will often take exponentially longer for various reasons, yet the ROI (return on investment) is fairly low for the last leg of development. I’m not saying its not valuable, but it does have a different value proposition. Instead of solving a problem, it might make the solution more polished and professional. For some products, this might need to be a necessity because of the industry, market or verticals in which the product resides in. It’s a case by case basis.
However, I’d argue that 95% of the time you don’t need something to be perfect before you ship.
So the next time you’re thrashing on making that thing “perfect” ask yourself if the problem is solved with the current solution and if you’re just trying to make it perfect. If so, just ship it already, and then fix it in a follow up update.
Doing so you’ll be able to learn from your customers, the product and the market.
So just ship it already and stop fussing over it.
Leave a Reply
You must be logged in to post a comment.