Sooner or later, there will be a need to fix bugs in whatever software you work on. How long it takes to fix a bug tends to be non-deterministic. Some bugs will be easy to fix, and others not so. Unfortunately, bug fixes on commercial software are often done the wrong way – under the guise of being done quickly. The “band-aid fix” is the wrong way of fixing a problem. The metaphor of the “band-aid fix” extends beyond the software industry, but I.T. has turned it into a real art-form.
At the heart of a lot of band-aid fixes is the notion that you can fix a problem without really knowing what the problem is. Commercial reality may well prevent a code base from being perfect, but the more band-aids that are applied to the code, the worse the software becomes to work on.
There may be a genuine need to apply a band-aid fix to code. When there is a real financial loss or damage to customers’ data, expediting a fix is understandable. Removing this kludged fix should be given a high priority. It is important to recognise that the band-aid won’t continue to hold a large wound together! If you do not remove the band-aid and perform proper surgery, the wound will rot. Once you allow the code to start “rotting”, it becomes difficult to arrest this negative momentum. It damages the maintainability of the code and encourages other programmers to act irresponsibly too. It is difficult to put enough emphasis on this point.
Depending on the culture in the workplace, it can be easy to dismiss fixing “less than ideal” code. Studies have shown how counter-productive poorly maintained code is on development productivity. I have yet to work with someone in the software industry that would disagree with that thought. Yet barriers are still erected that prevent acting upon it. There is a vicious circle alive and well in parts of the software industry:
- Code is recognised to be poorly maintained.
- Poorly maintained code is recognised to hinder productivity
- People are too busy to fix old code.
I cannot believe people do not see the irony with this! Allowing software to get in to this vicious circle is the first mistake. Programmers need to promote the culture that refactoring is not a luxury, but a necessity. Allowing some refactoring time on all development work can avoid the problem in the first place. Digging your software out of the hole created by the vicious circle is altogether a more expensive proposition. Not refactoring the code at all is even worse!
The idea that refactoring time needs to be allocated with development time appears to imply that you will not be able to push out new features as quickly. At a superficial level, this is true enough. Over the lifetime of the code base, this argument would not hold up. The neater and more maintainable the code base, the quicker it is to perform work on. In other words, good code is easier to add features to.
The biggest problem I see with a “band-aid” fix is simply that it is not a fix at all! It cures a symptom in rather the same way that pain-killers can stop broken legs from hurting. It masks the issue – but it does not mean you’re right to walk home! Masking problems in software, just makes them harder to track down. Software can be complex enough for one bug to be at the root of several problems. If you only mask the problem, you never know where else the bug will show up