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.
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).
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.
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.
So when you feel perfectionism exerting its insidious pull on you, zoom out and remember that "it is not that important".
On the same theme, when I was a teenager my dad told me, in passing, to try to not to be the person caring the most about something. It has stayed with me since.
I'm not to keen on motivating myself through nihilism, because I don't think humans are really supposed to work like that. When I start caring too much about something, I try and reevaluate my goals instead. e.g. what I think the good things in life are to me, and whether what I'm doing is genuinely going to get me there.
Finally, if you can help it, don’t work on projects that you can’t stay motivated for. If you’re doing a startup or research or something where the motivation is entirely internally generated, I think this is the way to do it. If you have a day job well, it’s way harder, and I empathize with you.
Then I say “What could I do in X weeks that I can actually ship and that is a real step toward the first Y % of my perfect vision” and I execute on that. I make sure that I am actually building part of my perfectionist vision, not some hacky garbage, but just limited in scope to be achievable in limited time.
Inevitably, along the way I realise my perfect was mostly wrong so this is an iterative process. I refine and repeat.
But your perfectionism is not wrong - use it to your advantage! Just make sure you are also a perfectionist about actually executing your ideas and shipping something.
The way I pull myself out of it, for any “medium,” whether it be art or technology, is that producing an artifact, no matter how imperfect or embarrassing, is better than a perfect idea that never makes it out of my head.
Having the combination of a place to put the ideas and then see progress (via the DONE- prefixes) was helpful to me in (partially) tackling rampant perfectionism.
As a concrete example, this weekend I was working on a tracker for my old boiler (a 1950s cast iron atmospheric with a single stage burner, fixed temp limits, simple relay-based bang/bang control system) to guide my selection for the new system this summer.
The system could lookup the outdoor temp, humidity, precipitation and temperature forecast, track the gas meter, calculate the reset target, tell when various zones are calling for heat, figure out how long the burner ran, intercept and proxy/rewrite the thermostat calls for heat, log data to Icinga/DynamoDB, have a Grafana dashboard, do anomaly detection, have a 7-segment display, have a web interface, speak MQTT, be queryable by Alexa, etc. But the first thing it needs is a temperature sensor for the boiler, so I made a long list, but worked on that first. (Then OTA updates so I could update it without disconnecting anything. Then on a web interface so I could avoid building any other interaction methods. Then an SVG graph of the last hour of data, then…) I find “my task for the next 20-30 minutes is clear” to be super helpful.
Screenshot: https://imgur.com/a/VM7nD74
(my own adaptation of Kelly Johnson's statement here: https://www.goodreads.com/work/quotes/97803-skunk-works (search for "wrong decision") )
Looks like you found the "often".
To help you release yourself from this line of thinking it can be helpful to imagine how you interact with other peoples code that they release. I’m guessing that most of the time you get really excited about other peoples code. Even if you have critiques or would have done it a different way. I’m guessing that the overall feelings that you have when other people release working code, either on your team or in open source, are mostly positive. Try to realize that that’s how other people receive your code as well.
Us codependent personalities gain our sense of well-being based on what others think about us. So, everything has to be perfect because the prospect of rejection is very scary. I view a rejection of my work as a rejection of me to an exaggerated degree.
If this rings true to you, my advice is to find a good book on codependency or begin seeing a counselor and begin to understand yourself a little more.
But it's definition is much broader than that. And, I would argue, much more common.
Take on bigger risks and set bigger goals for yourself. When your pants are on fire, your brain will not care about whether your shoelaces are tied or untied.
FAANG stability and cushy salary does this to a lot of other people I know.
Yaknow what? He got 10x the amount of work done that I did.
'perfect' doesn't mean 'pure, clean, never needing to be rethought', 'perfect' to him meant 'meets requirements'. 99% of the time, none of his code ever needed to be touched again and if it did need to be touched..it was easy and rote to update because it was easy to understand and simple to modify.
less is more, but the 'less' applies to abstractions, not loc.
Just because you CAN take something to the next level, or iterate one more time till it feels right, doesn't mean you should or that there's value in doing so.
Their code was full of bugs which they fixed immediately, causing silent regressions. They never wrote tests.
The other 5 places they had copy pasted that buggy code still remained buggy.
Also whenever they spaghetti code themselves into a corner, they spent 10x longer refactoring stuff as a result.
In effect, it's not that they got 10x work done, it's that they make everyone else get 10x less done.
What they never realize is that when things break (and they will, when there are no unit tests, copy pasted code in several place, and inscrutable architecture that no one but the one who wrote it understands), it takes the rest of us 10 times as long to poorly fix/implement the new requirement.
Given enough time, the original 10x engineer moves on or quits, and all he’ll breaks lose because the department or company is left with a giant pile of turd that breaks whenever you look at it.
Nonetheless, maybe realizing that "perfectionism" is a misnomer, since it doesn't optimize resource use for resolution of the problem? Maybe realizing that you are being inefficient, wasteful, and taking comfort in simple polishing, rather than looking for a true solution?
In other words, "perfectionism" for me was always a way to be lazy and take comfort in a false sense of doing a better job.
As Newton would put it - A lazy person in motion, remains in motion, and a force of will is needed to re-assess and pivot.
A common misconception is that working hard is hard. I find that to be completely false. I can lift weights to exhaustion, polish a car hood to exhaustion and get every little spec out, work on code I perfectly understand endlessly, etc. It's much more difficult to actually observe, pivot, and do the right amount.
Maybe the fear of actually doing something outweighs the costs of not doing it under the guise of making it better? Maybe something else?
I found Bezos's thoughts on decision making useful: understand if the decision is a two way door, and if so, move forward with 70% of the data you wish you had. Or 70% of the product, implementation, whatever.
See e.g. https://www.aboutamazon.com/news/company-news/2016-letter-to...
Then lots of reading and experimenting. Related thread (and great article from a fellow perfectionist) « Unlearning Perfectionism » https://news.ycombinator.com/item?id=30223559
Jokes aside, a better understanding of the need for time- and budget-limited solutions, as well as the realization of the maladaptive social origins of this issue have helped me control my perfectionism to an adequate degree.
Fortunately it lead to a « good enough » understanding and mitigation state in my case. Quite similar to yours it seems!
To whet your appetite, here is the opening line: "Many procrastinators do not realize that they are perfectionists, for the simple reason that they have never done anything perfectly, or even nearly so."
Software (like Art) is never finished, only abandoned.
Now I’m really curious. What do you possibly need to add to it over the course of 22 years?
The bigger thing I see for myself is the fear of not having control. Not knowing in which direction things will go. I think this happens to me a lot in life, where i want to be able to predict and know what will happen. When i think of this in software, i can go into hyperdrive because of how quickly and far software can scale—the multiplier effect on any imperfections.
I don't really have an answer at this moment for his to deal with it...what came to me in the last few days is that I would rather be more present and less perfect. When i try to be perfect, i tend to close off and hide until a big reveal, and throughout that time I'm not showing up with myself or the things I've made. Conversely, if i focus on being more present, I can prioritize showing up over showing up with the perfect thing.
I thought about this in the context of posting photos of myself online and to friends. I've gained weight over the last few years and don't feel very confident in how I look right now. And yet, many times, I'm just happy to see my friends, regardless of how they look. Maybe I have an initial shock at how they've changed, but that can quickly fade into "but I'm glad to see them." So I imagine this may work with products as well: the initial "hmm, why does it look/function this way" changing into "but I'm at least glad it exists and I have access to it"
Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away
- Antoine de Saint-Exupéry
It's a great quote, and something to live by. When innovating, I iterate and build things piece by piece, often taking away more than I add.One was getting focused on the purpose of my activity. I'm writing a letter to persuade X of Y. I'm writing documentation so users know how to do Z. I'm coding a module so the system can do W, which lets users do A and B. I'm patching this drywall so my house looks nicer. Then I can subvert whatever perfectionistic impulse comes my way. Maybe what I can do in the time I have, with the knowledge and skills I have isn't perfect, but it's better than what exists now. Maybe I can't write a full manual with screenshots, but I can at least create a Help page with a few bullet points--it's now better than it was, and that is progress toward achieving the purpose I set out after.
The other was having fun. Not necessarily at work or other tasks (I do have a friend that loves doing drywall; I do not feel the same!). But I found the more fun I had in life, the less hold perfectionism had on me. If I go throw a frisbee around with a friend, it doesn't matter if not every throw is perfect. It can be kind of fun to try goofy shots on a basketball court. What if I try playing a board game with a completely different strategy than usual? I might learn something, my friends or family might tease me, I might lose. Oh well. What if I try telling jokes and they fall flat? It wouldn't be the first time! Just having fun and enjoying the moment seems to keep me from focusing on myself, and that's a big part of it.
Come to think of it, being a parent (especially of small kids, because nothing is perfect in a house with small kids--wait, and older kids, because there's no way to keep older kids thinking you're perfect) helps too. And managing people (at work, or coaching a team, or coordinating volunteers), because in the practice of tolerating imperfections in others, I learned to tolerate them in myself, too.
And as I skim this over before posting, I realize that a lot of it is being less focused on myself. Easy to say. Tougher to do. And almost impossible to do when trying it.
That is one of the most concrete lessons I've had on the consequences of continuing to fiddle with something instead of leaving it alone, observing, and planning for the next time it's appropriate to touch it. Most beginners end up loving their plants to death.
Since software is made by people, it has characteristics that could be seen as organic. You can kill it like a tree, or help it become what it wants to become with minor suggestions from you.
It's easier for me to put down perfectionism as long as I have a plan, or can see the plan, that I would use to move from the "good" solution to the "perfect" solution. Then I circle back to that plan when the problem needs more attention.
"Wabi-sabi" - perfection in imperfection...
This can be as easy or difficult as you choose it to be. It's seems to me like you could you use a small dose of tough love. So here goes... If you really believe you can be perfect, then you're delusional. However from the quality of your question I'd be willing to bet you're not, so that begs the question, why do you insist on torturing yourself?
If you're a sucker for a pain then keep on.
If you want to be happy however, why not start by realizing or accepting that perfection is not necessarily what you seek but the learning on the journey while we attempt to reach that perfection is the true experience here. Enjoy the ride brother, life's short, smile, be happy, appreciate what you have and keep on keeping on.
You will not reach perfection until you realize you must accept being perfectly imperfect. And when you reach that place where you see your Wabi-sabi you'll be good to go.
I hope this helped in some small way.
Sincerely, Jean-Pierre
p.s.- if you want, checkout your cortisol levels (stress), thyroid and overall health for stress markers as it could possibly lead to serious issues if left unattended. You can go to a blood lab without having to visit a doctor for a prescription, just go to www.PrivateMDlabs.com (full disclosure, I'm the ceo there).
I first found the technique in the book The Artist's Way. Plenty of people have adopted it successfully to shut off the inner critic.
Basically the idea is you write a couple of pages every day without thinking about what you're writing. Something like stream of consciousness. If you don't know what to write just write "I don't know what to write" until something else pops up in your mind.
Also, I found that I tend to perfect only the things that I work on alone. As soon as anyone else is involved, you have to start worrying about things like not making difficult merges, and most perfections fall into the category of “PITA merge”. That grand 50,000-line code-reformatting that someone did will not really help, it will just come up again and again across 4 branches that they didn’t know existed, as each person trips over the same things. And I guarantee there is at least one tiny bug in that reformat somewhere. So don’t do it; keep things as close to what they were before as possible, pretty or not, for as long as it lives, unless you can be absolutely sure that there won’t be other branches out there.
Usually the help is very simple, like "help me break down this larger ticket into smaller tasks". It might only take them 15 minutes to do this, and feel like you're wasting everyone's time, but getting past the blocker is more important ultimately.
I’ve found that sharing my work actively as it is being created helps. I write a lot of documents that get delivered to the end user or customer and I now tend to share them really early as an rough “sneak peek”… once they’ve seen it “ugly” as a early work-in-progress I tend to be able to let go of my tendency to over refine the final version. It really focuses my work around “what is needed to get this good enough to work for you?” This doesn’t work for all clients or in all situations, but it can be really effective when it does.
I also keep notes on “how I would make this perfect later” . I almost never return to those “// Improve Me” comments, but it somehow lifts the weight just to acknowledge that I saw a thing that I could improve, and walked anyway because I wanted to eat dinner with my family that night. I suppose it’s a bit like like productivity confession…
This is a multidimensional problem, and the only way out is to find concrete measurable aspects. Focusing on things you can measure is important as "perfect" is a limit point which may not be achievable, and you my have hidden problems that don't get revealed.
My personal strategy is to make forward process on execution to get to some E2E point, and then the goal is how to drive optimization. The customer is there to help you understand what is good enough.
It's important to master this skill because it is easy to get stuck in the mud, and getting something perfect now may not be so great later on.
I struggle with it as well, and I've suffered other peoples' definitions of "good enough". However, that suffering allowed me to retire early and now I'm suffering myself as the customer. I'm a cruel customer...
If you look at the stacks we build everything on top of, it’s insanely brittle and barely works. We simply lie to ourselves that it’s otherwise so we can get out of bed in the morning actually ship something that’s useful to another human being.
If you don’t believe me, look at the organization or source code behind the black box you’ve built everything on. By some miracle it works, but barely.
I’ve found the best book that describes this is “The Systems Bible” — https://www.amazon.com/Systems-Bible-Beginners-Guide-Large/d...
You’ll chuckle as you read it and learn to embrace the miracle that anything works.
If I don't mess up, I can't fix it, and the world could really use more people who are willing to admit fault and work to repair mistakes. We all make them; I find lots of people with perfectionistic tendencies (myself included) hold ourselves to a much higher standard than others, so I just created a new impossible standard to meet that makes it possible to mess up, admit it, and move on. (Now the impossible standard is that I don't possess infinite grace about my mistakes, but...)
Perfectionism occurs due to a lack of information. You don’t know what “good enough” is so you err on the safe side. The more you put something in front of people and then talk to them about what they think the better calibrated you’ll be.
Without knowing you personally, the strategy I suggest is to honestly think about what your perfectionism is. What's stopping you from stopping? "I need things to be perfect" is not an answer to this question, it's the smokescreen you throw up to stop yourself from asking harder, scarier questions about what this behavior is. Good luck!
On a different note, perfectionism can be a symptom of procrastination. It requires much less will power to fine tune an existing thing, than it is to start something new or work through early steps. If this is the case, then apply the usual anti-procrastination techniques: vow to put X minutes a day into a project in order to make it a habit and get the ball rolling; identify obstacles that are creating friction; re-think the design and simplify; breakdown the task to make it less intimidating; etc.
There are other things to consider: our attachment to other people's opinions, perceiving failure as a lesson and investment towards our success, knowing that perfect is the enemy of good, and so on. But that will naturally come when we remove our ego from our work and not give it power.
I struggle with starting. I think I can't accomplish the perfect result I envision so I find myself paralyzed and unable to begin.
To help with that I remind myself of the Pareto principle. If I can accept that I may get MOST of the way to my goal on the smaller portion of my effort, I can usually get started.
The next struggle is finishing things, running into barriers and deciding to start over instead of overcoming them, or moving on to a different project. I don't currently have strategies for that unfortunately.
It's hard to break these mindsets and habits.
I think you're on a similar note to my thought on this thread. As I've gotten older it's been less about perfectionism as a platonic truth, and more as "the greatest I can be" knowing that it won't be perfect.
That causes other problems, but does including trouble starting and finishing.
So my most recent method is "just read the book." And if I get stuck, to keep reading the book. It's when I put the book down or get stuck the book doesn't get finished. But at least if I finish a book I can always go back, and then I have one more thing accomplished even if it's not 100% and it's better than 10%.
I think "just do the thing" is the best advice I've ever gotten.
After realizing this, I realized that I am so far away from perfect. I'll just do my best to make the architecture somewhat future proof without writing unnecessary code.
Additionally, thinking about what else could be made improved or closer to perfect instead of what you are trying to do perfectly. What else could be improved? Is that more valuable? What would deteriorate in your pursuit of making something perfect?
It's hard, if not impossible, but at least worth considering.
Does doing x save you time later?
Does doing x make you significantly more happy?
Will you regret spending time on x?
Does doing x help others?
Are there things more important than x that need to be done now?
There is enough people that are comfortable compromising on quality. I decided, rather than to fight it, to find for myself a niche where being perfectionist pays off.
Not sure if that applies to your context but that's how I see it with building stuffs.
I empathize with perfectionism. I felt it strongly when I was young, and growing up with a family member consumed by it, I feel fortunate to have mostly left it behind a long time ago.
To answer OP's question, I sought out different goals.
Some excerpts: - Don’t forget celebrating successes - 'done is better than perfect' - ‘if you're not embarrassed by the first iteration of your product, then you've shipped too late…’
As more and more is shared, I've seen my kids not want to try things simply because they see people doing the same thing amazingly well. The same people doing things so amazingly well don't necessarily share all the work and failures that went into getting there which is a shame and probably a better lesson then the end result.
Perfect the art of embracing the not perfect as being the perfection since perfection is ultimately a quantum state thus if you were to reach it, it will cease to be perfect.
Run this through your perfectionist mind and it should compile nicely.
I also lived in an industrial farm while doing that project and I noticed many areas are incomplete and imperfect yet the farm is operational. It gave me a good metaphor on why large complex spaces will surely have imperfections everywhere, and it's okay.
If you can wait for perfection, you probably don't need to build it at all, and so you've already got your perfect solution - nothing
It was my experience at most of my tech company where people rushed features with full of tech debt implementation.
Like a wise man said: think clearly before any action.
Apparently the relief to this struggle is either moderate expectation of oneself or the perfect results.
I guess it’s impossible to deliver perfect results in highly uncertain endeavors like entrepreneurship. But it’s very possible to deliver perfect results as a craftsman.
It's also literally impossible to achieve perfection since you only approach the epsilon distance to perfection.
That's why smart people stay away from perfectionism, because wanting perfection is a mental illness.
Exposure therapy can help.
So, practice intentionally shipping something with a missing feature, or intentionally getting rejected. Doing both of these things mindfully, noticing how uncomfortable it makes you feel.
We'd be a lot better off if we ditched the concept of perfection and go with "perpetual improvement' instead.
When you go to heaven, you reach a state of perpetual improvement. :-)
In all seriousness though, shipping in order to eat is an amazing way to learn to balance done with “good enough that I won’t spend the next 3 months fixing bugs”
* Consistency is more important than perfectionism
* Perfectionism doesn't matter in most of the fields. Just being close to perfect is enough.
By being imperfect, I guess?