I spent hundreds of hours agonizing about every detail (name, domain, programming language, framework, database, text editor, operating system, computer). For weeks at a time, I'll seriously consider (without actually doing anything) designing and implementing my own programming language/operating system/IDE/database, because none of the existing ones are "good enough". I regularly come back to the old Vim vs Emacs debate. When I need some challenge, I look at the Millenium Prize Problems and take a stab at P-versus-NP. Rinse and repeat, ad infinitum.
Every time I buy a new computer, switch to a new Linux distribution, setup a new IDE, go through a new programming language tutorial, I think that's the last step. I think that I'll finally be able to be productive. This is never the case.
I think we use procrastination as a defense mechanism to avoid facing a reality in which we might fail. I think that's a problem with our ego. What if we're not good enough?
I don't know what the solution is. I'm still struggling with this.
I think people who actually build stuff just make arbitrary decisions and don't care if things aren't perfect. They'll stack a bunch of hacks and anti-patterns, and look at the output rather than at the process.
Maybe I'll try that.