Despite my very limited experience as a software engineer, I've noticed one overarching issue that seems to come up in my work: tool perfectionism.
For me, this type of perfectionism usually manifests itself in the same sorts of ways before starting a project. What front-end Javascript framework should I use? Git or SVN? What kind of web framework should I use? What graphing library? Should I use styled components? What naming convention should I use in my CSS? Should I even begin on this project?
Yeah, well, maybe the analysis paralysis is not that thorough every time. But the time and mental effort required to move past the perfectionism involved and actually begin on a project is definitely significant.
By the way, this extends to far more than software projects in my life. I notice this as a recurring phenomenon in everything from studying, to exercising, to writing.
I can hold off on studying during my commute, I don't have my textbook with me.
I can exercise another time, I don't have time to go the gym right now.
I'm not on my laptop, I probably should just write that blog post tomorrow.
These mental gymnastics ignore that I already know my syllabus, or that I can jog around my neighborhood, or that I can make a shorter blog post to account for a less comfortable writing platform.
I don't know how to explain this type of perfectionism other than it being a scapegoat for fear, laziness, uncertainty, or some combination of those three. I think it's important to recognize this kind of thinking for what it is when it rears its head, and optimize for action as opposed to... well... optimization.
With this being said, and having identified its presence more and more in my day-to-day life, I've been led to conclude one inexorable truth:
Most times, it is best to pick the tools you have and just get on with it.