Perfect the enemy of good and good the enemy of perfect

Posted on

We've all heard the saying "perfect the enemy of good", a saying that is particularly paramount in software development where perfection is a Sisyphean task.

This is an area that I have grappled with a lot in my experience. It is in my nature to want to do things as best as they could be. But it can be all too easy to lose sight of the original goal in the quest for perfection.

What is the use of having a full CI/CD pipeline with end-to-end, visual regression and load testing checks if you deploy once every 2 years. What's the point of having extremely optimized logic if the logic is only ever run once a month on a machine with computation to spare.

Good enough is acceptable in these scenarios. The time taken to implement these superfluous and gold plated changes could have been better spent making tangible benefits. In a world where time is money you want to be spending time on the most valuable things.

Don't get me wrong doing these things for learning or personal interest is completely fine. It can be a great way to understand something and play around with things like optimization. I do think personal projects can still fall into this trap if purely learning is not the end goal however.

But is this it? Are we doomed to always create things that are good? If software is an art form should we never strive for perfection? Should we tell artists that good enough is good enough? I don't believe so.

Whilst I agree we shouldn't let perfection be the enemy of good I also believe good shouldn't be the enemy of perfection.

Don't just write good software, write great and amazing software. Whilst perfection may never be attained that doesn't mean we shouldn't strive for it where it is pragmatic to do so.

Acknowledging that this lies on a spectrum and that freedom to explore this spectrum can be liberating.

Don't worry if your code isn't perfect, but also don't worry if it is! Be proud of what you create.