The last few years I had to deal with a spreading problem: perfectionism.
While most people think perfectionism is a good thing and leads to better software, it begins to get a problem when you are never satisfied. The Classic Forum is the best example for this phenomenon: after I released the 4.3 release, I began to rewrite the configuration subsystem. While doing so I discovered several problems with the other subsystems as well. So I began to rewrite them, too. After a while I decided to completely rewrite the program – also due to perfectionism, to clean up the mess, to do it the only right way once and for all.
Of course there is no „one and only right way,” and rewriting the source completely was one of the silliest things I could do: It wasn't the code getting worse, it was me changing my opinion what proper design is. And this hits me again and again with my other problems, too: first I began the rewrite with C again. After I wrote some code I discovered, that I really miss the features of object oriented languages and I switched to C++. A few weeks ago I learned about Node.js and thought that it would be really cool to implement it with Node.js.
What I am trying to say is the following: perfectionism in the right direction is good and leads to better software, better tools and brings us forwards. But you have to be really careful: perfectionism in the wrong direction kills all productivity and leads to vapor ware. Have a look at TextMate 2, The Hit List or even the Classic Forum 4. Every existing bad software is better than every good software in your mind.
With that said I'm now trying to follow the path of continuous improvement. A software with only a small feature set but released is much better than a software never released. I try to release my projects more often, with smaller feature sets, but therefore more often: a software doesn't need to be perfect and it will never be. And I really, really should stop complaining about my tools and begin to get the work done :-)