The quest for perfection is a tantalizing yet generally elusive goal.

As a software developer I feel a continual pull towards perfectionism in my craft. It comes down to wanting to produce elegant software designs that are executed with clean code, resulting in quality software that is easy to maintain and adapt to future requirements. Essentially I like to write code that I wouldn’t be ashamed to share with other programmers whose work I look up to and admire.

This desire to write good code doesn’t just appear natually. I think it is something has been developed and encouraged by having great mentors, reading good books on software development and listening to master programmers, those who have honed the art of software development. What I love about listening to great programmers is that I always feel the push to do better, to improve myself and the code I write. This is source of the pull to perfectionism for me and I’m very glad for it.

Overall this is a great thing because I want to grow and improve, I want to learn from my mistakes and know I can do better in the future. However, there is also be a dark side which can be debilitating.

This dark side causes me to doubt that I’m doing things right and makes me unable to start coding until I’ve figured out the perfect design. Because I’ve so often seen how others to do things “right”, my own code can sometimes feel to fall so short in comparison.

The dark side means means that the drive to perfectionism can also be a drive to inaction and can lead to an inability to execute.

It can lead to a kind of procrastination, in which I feel like I am being busy, searching for the best design or current “best practice” on how to implement some detail. But in reality I’m wasting time, not producing anything of value. It can lead to a vicious cycle where having more options makes it harder to make any decisions on how exactly to get started.

When I find myself caught in this trap of inaction, I find the key to get over this hump is to think small. Instead of trying get the perfect big picture design, I just start working on something trivial yet valuable. I think about the smallest piece of functionality that would move the requirements forward and then implement that. Generally in my experience it’s impossible to get the perfect design without trial and error, without building something which can then later be improved iteratively.

I have found this is one of the keys to agility in software development. Never get bogged down by trying to build some perfect work of art on the first try but rather move forward in small steps, always iterating on and improving the design. Don’t get overwhelmed by trying to understand the big picture, but take a deep breath and break your procrastination but doing something.

It’s amazing how getting something done, no matter how small, can really help to move you forward.