Hacker News new | ask | show | jobs
by simonw 1567 days ago
I keep coming back to the old Reid Hoffman quote: "If you're not embarrassed by the first version of your product, you've launched too late."

I also constantly remind myself that "perfect is the enemy of shipped".

A useful thing to remember is that you are the ONLY person that knows how beautiful the thing you were planning to build was going to be. What you've actually built is always going to be disappointing compared to the potential thing you had imagined.

No-one else has that context though. From someone else's perspective, you built a thing! If that thing is interesting or solves their problem, they couldn't care less what it would have been if it had matched your imagination of its full potential.

Most people never build or ship anything at all, so shipping itself is a big cause for celebration.

5 comments

I consider myself a reformed perfectionist, having struggled with it for a long time. OP should take heart that perfectionism can be managed, and you can accomplish wonderful things.

Perfectionism has positive aspects, but only when you continuously work to direct those tendencies towards constructive ends. Left undirected, it can collapse in a paroxysm of endless refinement from which little escapes.

> "perfect is the enemy of shipped".

This is a key concept, although I find that a more negative emphasis helps me: I need to remind myself that overengineering is destructive. Not only to the shipped product, but to the unshipped product right before my eyes as well, as productivity and value added diminish towards zero. (Refinement and refactoring are not always net positive, because churn introduces bugs, and because models created without the input of actual users are usually ill fit.)

It is also helpful to involve other people — to talk to people regularly who are counting on you to finish something, to experience not only their appreciation but their expectations and their wants. Setting incremental deadlines for small gains, promising others that you'll meet those deadlines, and then fulfilling those promises creates a virtuous cycle.

Finally, I've had to accept that there are limits to the kind of environment that I can thrive in. I'm just not that effective when working on projects with poor engineering practices: failing CI, no documentation, chaotic version control, wildly unrealistic expectations. Some people can do great work under those conditions, and I can still function — but it doesn't play to my strengths so I try to avoid placing myself in such environments.

Fear is the enemy of the shipped. Perfectionism is a drive that keeps us shipping something better and better. Folks are happier that way too since they get to see all the snapshots on the road to perfection, which helps them understand how they too can create perfect things themselves. Plus it gives others the opportunity to be a part of that perfection. Like for instance upgrading a web framework so its password system uses pbkdf2 instead of salted hash. Then someone else comes along and strengthens it with bcrypt. Then another comes along and adds argon2. It's a great story.
> I keep coming back to the old Reid Hoffman quote: "If you're not embarrassed by the first version of your product, you've launched too late." I also constantly remind myself that "perfect is the enemy of shipped".

Unfortunately, I believe that this philosophy is largely behind our current software being the shit it is. Seemingly basic features in absolutely fundamental softwares are broken or majorly suck (e.g. python package management, Intellisense for C++ in Visual Studio) and everyone is fine with it. One can only hope that releasing shit is the best we can reasonably accomplish and the alternative reality, where humanity takes time to release software products of reasonable quality, is just a pipe dream (because people are actually not capable of working that hard).

I don't think this quote is incompatible with a desire to ship high quality products.

The Reid Hoffman thing is about your initial launch. In my experience, until you've got real human beings using your thing you have absolutely no idea what it is you're even building: you could spend a full extra year working on features that no-one will ever actually use.

So getting early feedback is crucial. But that doesn't mean that, once you've figured out what people actually need, you should continue to be embarrassed by what you are building.

> I also constantly remind myself that "perfect is the enemy of shipped".

That is easy to say as marketing first personality with access to money. In this case shipping anything is critical and you can fix it later.

As a bootstrapped technologist product quality is all you’ve got. If the product isn’t revolutionary then nobody cares and you won’t change their opinion. So, in this case you need to get it mostly right, because you won’t get a second chance at a first impression.

this is a terrible philosophy, and one of the reasons everything sucks