|
|
|
|
|
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. |
|
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.