Perfectionism: just do it again
There are two dimensions of perfectionism that I identify with. One is going above and beyond to make sure that folks dont think you’re not good enough. The other aspect is attempting to avoid rework. I want to address “rework”…
For many years, I thought that if I plan or analyse a problem long enough I’ll come up with one true solution that would apply, always. In fact, this is a lament I frequently hear at work. “If we spent just a bit more time collecting requirements this project would’ve been so much easier!”. For me, it typically manifests in analysis paralysis. Did I spend enough time thinking about the problem? Did I consider all the angles? What have I missed?
I learned from “Software Estimation” by McConnel that this is basically a fool’s errand. Requirements and architecture shake out as part of the development process. McConnel calls it a Cone of uncertainty. At the beginning of the project, we don’t really know what we are building. We are somewhat confident of the end goal, but not the intermediate details. As the project progresses we identify and verbalize implicit requirements. This is an iterative process – think agile. As part of this process we are sometimes forced re-do work that we already have done. In fact we have a special name for it - “refactoring”.
This perfectionism does not only apply in software engineering for me. It spills into all areas of my life. For instance, I have a habit of over analyzing my purchases. I will spend an inordinate amount of time trying to identify the best item in a particular category. Partly it’s a question of finances, but ultimately it turns into analysis paralysis yet again.
So what is a recovering perfectionist to do?
I’ve been turning this Marcus Aurelius quote in my mind for a while:
The impediment to action advances action. What stands in the way becomes the way.
To me, this means, simply, try to solve the problem in front of you. Don’t try to analyse the whole project. Don’t solve all the problems. Solve the next problem. In this way you gain momentum.
It follow then, that some mistakes will be made. That’s ok. You’ll have to refactor, it’s just a part of life and not being omniscient.
This is better than being paralyzed by the unknowns. As you move forward with your project, the cone of uncertainty narrows and the architecture and implementation of whatever you’re building will improve.
Also, I’ve basically eliminated failure from my personal language. Any task that doesn’t achieve the desired result is simply a delay and I re-adjust immediately to find a new tactic that will put me back on track. If the time-effort to proceed isn’t worth it, I dump the effort and change strategies. I long ago got rid of the idea that anything I create is special or worth saving. Outcomes are what matter. It’s a very pragmatic approach and eliminates the perfection tendencies because it gets things done.
One aspect that is worth thinking about is diving in without any analysis, see cowboy coding. Theoreticaly, this feels like someone diametrically opposite to my style of doing things. Realistically though, I think everyone has both tendencies. I do not know how to improve, other than trying to be more self aware.
I was thinking about this as I was re-doing a bit of low voltage wiring in my vehicle. This is the 3rd or 4th time I work on this particular area of the car. I’ve made a lot of mistakes even though I’ve done a lot of analysis previously.
- I picked up the wrong wire. I bought copper clad aluminum wire. It’s cheaper but corrodes quickly in this environment.
- I picked wrong splice connectors and crimping tool that have failed to create solid crimps.
- I cannot for the life of me figure out how to route wiring nicely. Generally I leave excessive amount of wiring which does not look good.
I’ve focused on electrical safety (do not want a vehicle fire) and functionality to the exclusion of tidiness.
Well, no more.
Today I tidied everything up.
I acquired a project box (white in the picture) and I already had a bunch of waterproof cable glands. I added cable glands to the box, re-routed all my auxiliary wiring into the box and wire loomed all the wires.
As I was finishing everything up, I noticed that I routed one of the wires improperly so it cannot fit in the wire loom. So I’ll have to do it yet again.
Is it perfect? No. Is it much better? Certainly. Just do it, you’ll probably have to redo it again anyway.