When we set out to improve our legacy code and reduce the technical debt, should we go for perfection or for an ideal solution? Should we be perfectionists or idealists? The two may sound similar, but they have important differences.
This is a reaction to an email by Jonathan Stark. He sends out a daily email about starting and improving your business. In one of these emails, he explains the difference like this:
Perfectionism is a refusal to accept any standarshort of perfection.
Idealism is the practice of pursuing ideals, even if they are unrealistic.
Perfectionism is about rejection.
Idealism is about practice.Jonathan Stark
So with that in mind, should we be perfectionists or idealists, when we’re refactoring our code?
This is my take.
I’d say idealism is more useful. Even if you can’t and won’t reach your goals, they can continuously guide you in the right direction. These goals help you help others. They help you help ourselves.
You’ll have more empathy towards others, even if they can’t meet your standards. You won’t get as frustrated. Instead, you can help them move at least a bit towards your ideal, even if only a small bit. Though the above assumes some realism along with the idealism (ie accepting that not everyone will be able to or want to follow you).
Perfectionism can make others feel you’re attacking them. If you have to work with others towards a certain goal, and you’re not accepting a sub-optimal way of working, even if it may still get you to that goal, then you’re just going to be the jerk in the room. So in a way, especially how you define it, the perfectionist is being unrealistic. And it’s that end-goal that matters.
For example for me, I help teams reduce bugs and increase development speed, mainly in older code (legacy code). I could be the perfectionist and not accept teams writing “bad” code (whatever that is). But then I would not have any allies and have a hard time reaching the actual goal: less bugs.
Or I could be the idealist, where my ideals are that every developer in the world writes automated tests and beautiful code. But that is unrealistic and that’s OK. It doesn’t mean I can’t make a difference while aiming for that ideal.
It’s like what I read about democracy once: democracy isn’t something we achieve. It’s a continuous effort to become a more democratic society, while accepting that we’ll never actually fully get there.