Always striving for perfection...sounds like a good thing...right? There may be times when the struggle to achieve perfection is good, but I find that most of the time it is a hindrance in my career. Most agree that you often learn the most from your mistakes, but the very nature of a perfectionist is that they fear making mistakes. Don't get me wrong, I make plenty of mistakes, but I find it hard to willingly go down a path that I am not sure is the correct one. I must make concerted efforts to not get stuck in endless loops of planning, designing and gold plating my software. My biggest struggle on a new project is getting out of the starting gate. My perfectionist nature wants to have every aspect of the app defined and understood to the nth degree. I don't want to start on something because I know as soon as I do, I will see the problems and have to re-work my beautiful code over and over until it is a mass of unintelligible spaghetti code that makes me want to cry. The easiest way for me to get past this is to convince myself that I am first going to write a prototype that I will throw away when I understand what is needed. Even though I know that there is a very slim chance that I will ever just toss aside the code and start from scratch, it is a metal release that gives me the freedom to make the mistakes I need and to start cranking out code without the mental handcuffs of perfectionism. Following this pattern has forced me to learn to refactor intelligently and taught me the things that are difficult to refactor and should be considered before jumping in. Cleanly refactoring is a separate skill set and will take time to learn to do well, but it is a valuable one and well worth the time spent. Don't let a desire for perfection stop you from trying, for an imperfect thing is almost always better than a perfect nothing.