"If you can't fix it with duct tape, you didn't use enough duct tape"
-- unknown
"The problem is not the problem. The problem is your attitude about the problem"
-- Capt. Jack Sparrow
I've been thinking about fixing things lately. Like the general process of fixing things, not a specific list of things that need fixing (but I have one of those too). I thought I could share some of my thoughts on fixing things here.
Don't Fix Symptoms
Speculation Is Risk
Core Problems
Lacking Experience
Leverage Comes from the Fulcrum
If you do solve a core problem you won't just have fixed one thing, you will have fixed many things. You've fixed that core problem, but you have also fixed all the symptoms of the core problem. If the core problem was really deep in the system the impact will be huge!
Whack A Mole
So what happens if we don't fix the core problems?
You will spend a lot of time and money playing Whack A Mole. Every time you fix a problem that isn't the core problem you are likely to create or reveal another problem. If that doesn't happen, the core problem will find a way to reveal itself again. Sometimes you will fix an issue and a few weeks later fix another related issue and not even notice. That is because you didn't do the analysis and figure out what the core problem is.
Pyrricic Victories
Let's go back to that heat-death thing. Look at what you are doing and ask yourself, is my investment in the current solution so great that fixing it is as effective as replacing it? Because sometimes fixing it creates so much damage in the system you'd have been better off leaving it alone than fixing it.
Expenses
While you are playing Whack A Mole you are wasting the resources of the organization. You are creating a barrier between you and value delivery. Remember that our job as software engineers is to create and deliver value.
Sunk Cost
Often we fall into the Sunk Cost Fallacy and that further prevents value delivery. Keep in the back of your mind that software is supposed to be soft. If the best-right thing is to rip out the broken thing and replace it, then do that. But do it for a reason, not emotional, but justifiable.
Don't keep banging on the problem, core or otherwise, without considering that eliminating the cause is the right solution. And think big scope here, not what does this cost in my sprint, but what does it cost my organization?