When developing software or even building a SaaS business over-planning and over-engineering stifles your progress. Learn how to battle your perfectionism.
Perfectionism is characterized by setting exceptionally high standards of performance and unrealistic goals, accompanied by overly critical self-evaluations and concerns over making mistakes. [source]
Now, considering all aspects, being a perfectionist isn't necessarily just a bad thing. Take for example top athletes like Michael Jordan or Muhammad Ali. Athletes like these hone specific skills over and over and over to push the limits of what is thought humanly possible. You could argue some kind of perfectionism is absolutely necessary to exel at specific tasks. Self-oriented perfectionism in your personal life or body of work often comes with some positives such as:
- A high level of ambition
- Increased motivation
- Increased level of perseverance
- Could lead to world-class performance (e.g.: top athletes)
- Great attention to detail
- Striving to become the best version of oneself
There are a few different types of perfectionism, such as self-oriented perfectionism, socially-prescribed perfectionism and other-oriented perfectionism. In layman's terms, people are generally motivated to do things for the following three reasons:
- For themselves
- To please others
- To avoid social criticism
This article mostly covers how to deal with self-oriented perfectionism as it is the one we have the most control over.
Working on software is hard. As developers, we generally work out a given problem, plan/pick a solution and then implement it. There are usually hundreds if not thousands of different approaches to solve any given problem. So, how do you pick the "right" solution?
Unless the problem is very simple our solution almost always depends on multiple requirements or factors. These range from performance to scalability, time to implement and many other things. In most cases a single solution won't fulfill all requirements perfectly. This rings especially true when taking time or money constraints into account (e.g. deadlines and funding). On top of that, requirements tend to change quite frequently, so "perfect" solutions - if those even exist - won't be perfect for long.
With this in mind, perfectionism is essentially procrastination. Once you have arrived at a suitable solution, it is vital to not go overboard on refining it. This is true for planning just as much as the actual implementation.
So what can you do to make sure to not fall in the perfectionism trap?
Here are a few simple tips you can use to boost your productivity if you struggle with perfectionism as a software developer:
Be it for work, a side project or learning a new skill. Set yourself reasonable deadlines and prioritize your subtasks. Maybe you have heard about Parkinson's law:
The amount of work expands to fill the time available for its completion.
This means for example that when you give yourself 3 days to finish a certain task, it will take 3 days to complete it. Another way to think about it:
If you wait until the last minute, it only takes a minute to do.
→ Tighter, but reasonable deadlines will help you to get more done
Train yourself to find and build the absolute minimum viable product (MVP). Once you have it, show it to the customer/stakeholder. Don't "optimize" it without feedback. Often times, the first implementation isn't quite what they want regardless of how "optimal" it is in your eyes.
→ Find and build the MVP
→ Iterate on the MVP after collecting stakeholder feedback
This will save you a ton of time by building what actually needs to be built.
Could this have been done better? Is this the right set of tools I'm using? Maybe I should have done this other thing instead.
As mentioned above, don't assume there is a "right" solution. Every solution comes with tradeoffs.
→ Don't get stuck in the planning trap
→ Don't get stuck in the optimization trap
Digital products can be changed virtually at any time. Fixing a bug and pushing the fix to one million people at the same time? Easy. Adding features? Common. Digital products are fundamentally different from analog products. E.g. printed books. Cut yourself some slack. It doesn't need to be perfect on the first release.
→ Treat digital products like ever-changing drafts and iterate AFTER getting customer/stakeholder feedback
Perfectionism is common trap a lot of developers get caught in. You can keep your perfectionist tendencies in check by
- Setting deadlines and prioritizing tasks
- Building and iterating on an MVP
- Not second-guessing yourself (there hardly ever is a "perfect" solution)
- Treat digital products as changeable
A dose of perfectionism isn't a bad thing. Strive to improve, but don't get caught up in optimizing.
If you liked this article and know a friend who could benefit from it as well, please consider sharing it 🙏 If you want to get news and updates from me, subscribe to the newsletter below 👇 or follow me on Twitter.