Garbage Collect Tech Debt

Running a program takes more than simply moving data from one memory location to another.

Programs over time, build up garbage, which is memory that has been allocated but is no longer used. You must periodically clean up this garbage to keep things running without a hitch.

Tech debt is much like this. Every time you build a new feature without refining the existing design you allocate more tech debt.

A solution to this is treating your software development process like an algorithm to keep your codebase healthy,

Technique #1, Tech Debt Cleanup

The classic. Most only take out the trash when the house begins to stink.

As programmers, we start to see that code is bloated with tech debt and then begin a refactoring process. That is all well and good, but sometimes it never happens.

When we leave issues unattended, they can sometimes build up into nightmares. Imagine leaving your dirty dishes piling up until they evolve into a monster that you need to fight with all your force. Refactoring efforts can become so big that they steal time from feature development, meaning that it becomes rushed.

This can lead to a vicious cycle where small problems snowball into massive headaches. I’ve seen this for myself in my current environment where only developing features seems to matter — “why should we spend time doing anything else”?

Technique #2, Tech Debt Avoidance

Imagine a world where we could avoid creating tech debt?

Instead of piling those dirty dishes in a sink, simply wash them as you go. When a new feature is requested evaluate how well the current design will handle it and act accordingly.

Ken Beck of the Agile Manifesto has this down:

It certainly isn’t easy. Avoiding tech debt sounds like a dream but in practice it is anything but. Surprise requirements can and do pop up leaving plans in tatters.

Choosing the Right Algorithm

In the paper this post is based upon, there are four debt algorithms detailed to tackle tech debt. 

None

Do nothing. Let the debt pile up like dirty laundry in a college dorm. Suitable for one-off scripts or throwaway projects.

Reactive

Focus on feature delivery and clean up debt as you go. This is the default mode for most teams but can lead to significant pain down the line.

Proactive

Avoid creating debt by refining your design continuously. Less common but ideal for stronger teams.

Balanced

A combination of the reactive and proactive approaches. This is the sweet spot for most projects, blending proactive design with reactive cleanup.

Who am I kidding though? Most of us would simply like to have enough time to tackle tech debt during normal working hours.

Infinite Vs. Finite Games

Deciding your tech debt strategy is like choosing between playing a finite game (with a clear endpoint) or an infinite game (where the goal is to keep playing). 

Startups and projects with tight deadlines play finite games, often accruing massive debt to meet milestones. More mature projects aim for the infinite game, focusing on sustainable practices to keep the project alive and thriving.

Pick your poison people!

Conclusion

Managing tech debt is about balance. If you’re clearing up a mess you’ve already made or trying to avoid creating the mess you should tailor your tech debt algorithm according to your situation.

Previous
Previous

How I Was Rejected With 🙂Emoji From a Dev Job

Next
Next

Tech Industry Job-Hopping Disaster of 2024