Each solution to a problem can be rated on efficiency (i.e. how easy is it to implement) and effectiveness (i.e. how good it is at solving the problem).
Represented in a 2-by-2 (like the good little former management consultant that I am):
Notice the following two things:
1. the correlation between effectiveness and efficiency is counter-intuitive
It’s counter-intuitive. Yes, simple solutions are easier to implement and
more effective! Reason being, they are:
- easier to change (because they are easier to understand)
- less brittle (because bugs hide in the darkness of complexity*)
2. My expertise in drawing 2-by-2’s
Deliberate practice, there are no shortcuts in life
So how why is software development hard? Just pick the most effective and efficient solution every time and go eat cake.
The reasons why programmers are often hard at work instead of enjoying high tea is:
- It’s hard work finding the most efficient and effective solution. It’s full of uncertainty, you fumble in the dark a lot. You don’t make visible progress…
- We programmers love to write code. There is nothing like it. Extending your intentionality with the help of a machine** … heaven. So what do we do? We pick the first solution that jumps to our mind and implement it. We miss the simplest solution.
So should we always delay implementing the solution until we’ve found the simplest and most valuable solution?
No, because development time = search time + implementation time
search time = time searching for the solution
Implementation time = time implementing the solution
So if you keep searching for the best solution at some point finding a solution time will dwarf any implementation time.
Therefore you need to find a balance.
When faced with a balancing act it’s worth thinking on which side your bias is. Do you spend — on average — too much or too little time searching for the best solution?
I think that on average we don’t spend enough time on searching for the best solution because:
1) In 2021 agile has finally colonised the whole known universe so you’re not “cool” if you’re not writing code***
2) making the computer do stuff — aka coding — is so much fun so as soon you have a first solution you just rush to code it
Conclusion? Spend time finding the most simple and effective solution. You’ll feel awesome. It’s delayed gratification.
*: who told you programmers can’t be poets?
**: who told you programmers can’t be pretentious pseudo-philosophers?
***: To be fair I think Agile is great. Please just don’t use it as an excuse not to write great specs