Technical debt. That green eyed monster we are all to familiar with. That time eating and money munching little fella that is just hopping from one project to the next just making every task a little more difficult to do and time consuming with every passing day.
Any business that has had to manage a technology product for longer than 6 months has felt this. That time when you ask your technology teams, “Can we just quickly add …” and you are immidiatly met with a chuckle and the words, “Well … no because …” that is technology debt rearing is ugly head.
Technical debt is a business problem, not just a technology problem
Technical debt is one of the biggest risks to businesses in 2020 in my opinion. As the pandemic hit many where faced with the challenge of trying to pivot online and move their businesses a full 180 degrees. I remember waiting 20-60 minutes in a virtual queue to get 10 screws from B&Q in March just because their checkouts where built to checkout a single customer at a time to manage stock, it took about two weeks or so before they eventually sorted it but those where 2 painful weeks for both customers and I am sure engineers.
Out of control technical debt hurts the bottom line in a big way. You are no longer delivering better experiences for customers or building ground breaking new solutions to tough problems. You are fixing silly mistakes, retro fitting and bolting on “hacks” and “quick fixes” that almost always become perminant fixtures. Each new change extends the timeline for the next, every task seems to take longer to complete than it did before and that time is compounding as well with disastrous effect. Engineers are unhappy and frustrated trying to tame the beast and grab hold of the runaway train while management are also running into brick walls of missing deadlines and ever reducing efficiency.
What you can do about it?
Now that I have spent 2 paragraphs paiting a end of the world picture I will get to the things I find helpful when thinking about tackling the challenge of tech debt.
More often than not I have found the best solution is to burn everything to the ground and start again with what you know now. We all to often get to attached with the way we do things and don’t explore a better solution with the facts we have now. We need to constantly inform and improve the system with the new information we gather along the way.
You can never design a perfect system for the future, I learnt this lesson the hard way. At one point managing 15 projects on my own all with their own requirments and managing a business on top of it as well, time was a premium. When their was a new requirement and the current solution didn’t fit the specification, I just deleted what existed perviously, that simple, just got rid of it and started new with the new requirements. It works, it’s not pretty and sometimes it feels like you “wasted your time” but you didn’t, you did the work for what was needed then, and this is what is needed now.
Put your technology on a diet
Technical debt is no different to financial debt, if the bills are piling up you best get out a calculator and make a plan quickly cause it isn’t going to stop just because you choose to ignore it and hope it goes away.
Most of the time we over engineer a simple task. Every developer (including myself) has done this and will continue to do this. I find it helpful to always ask “what would this look like if I didn’t have X, how would I still achieve this?”. Sometimes I find this helps me explore more creative solutions. Simple is always better.
Start an investigation team
To many cooks in the kitchen always ruins the pie. That being said if you think your technical debit is costing you money and time, start an investigation into solutions.
Start a small select team (with domain knowledge) who can properly analyze the problem and recommend solutions. The team should be experienced, but not to connected to the current technical solutions (you need someone willing to ask “Why is this here?”). The team should also have a wide scope of knowledge of other solutions or systems and be willing to “burn down the world” if its needed.
After their investigation their should be a report to management with findings, potential solutions and a plan of execution should the changes be green lit. Managers to need to be open minded to a bringing down the world. It sounds worse than it is. I once had a manager horrified that I had just Ctrl + A + Deleted a file that had been in a system for 5+ years, but 2 hours later I had it rewritten, cleaner and up to spec with the new requirements. If it changes I will do it again, and again and again. A fresh mind and view helps to clear the fog of the past.
Learn from those better than you
Most of the time we reinvent the wheel to a complex problem that has already been resolved. One experience I have had where this was clearly true was a project where the code was littered with over 2000+ conditional loops to display just a single page.
This is just not maintainable long term, eventually you get to a point where you loose track of what the product is even supposed to do. I thought, how would I have done this knowing what I do about this system and the business requirements now (everything seems so obvious in hindsight). I decided the right solution might have been to copy WordPress’ brilliantly designed extendability system. It is one of the most versatile systems on the internet today (powering over 40% of all websites online). So I tried it, copied the system from wordpress and presto, a cleaner way to extend the system that didn’t involve just putting thousands of extra lines of unnessessary code in. I could seporate the logic and it was extendable into the future without needing to edit it’s core functions directly. That is known as being “maintainable” and it is the thing we need to always be striving for in technology businesses.
You need to achieve a healthy level of debt
Look not all debit is bad, their is good debt and bad debt. Technology systems will always have some level of debt thats just how it is. That doesn’t mean however that we shouldn’t keep simplicity and efficiency front of mind.
Businesses becoming more technology dependend and going online means that more and more will start to experience technical debt and having an effective resolution framework is invaluable in trying to manage a ever changing world and business enviroment.
Do you have some helpful solutions or a story about technical debit getting out of hand? Leave it down below I would love to hear it.