How do you solve a problem like Technical Debt?

To paraphrase the famous song from the movie ‘Sound of Music’ where the kind nuns throw out this rather perplexing and inexplicably difficult question into the cosmos. Discussions of technical debt can be just as perplexing and unfathomable within organizations, creating deep divisions between the ‘techies’ and ‘business’.

What is Technical Debt?

Let me give you an example. Design has a great idea of adding a block/banner advertising a USP of the company. They want to bake it into the layout of the product pages. They know the scrum teams have a heavy backlog and do not want something too complex. They believe this is a relatively simple change which might, potentially, give large returns, leading to higher conversions.

Types of Technical Debt

All companies have technical debt. The inside joke is that Technical Debt is the way to describe your products that actually make you money. But not all tech debts are created the same. Some are more expensive and more difficult to get out of than others. I will try to classify the three main types of tech debt that organizations may come across in their lifetime.

Legacy Tech stack Debt

Tech landscape changes at a dazzling pace and no matter how current your tech stack is when you choose it, the longer your product is alive, the more dated/legacy it gets. Once a tech product has been around for a while, with no attempt being made to upgrade, 2 things can happen.

Legacy system voodoo
Legacy system voodoo

How do you solve a problem like Legacy Tech stack Debt?

There is no one-size fits all answer. For ELTS products, the answer is, in some ways, simpler. The business and Technology have to make hard choices to either retire the product or upgrade/re-platform it. It also gives business a chance to re-look at some features and see if they can upgrade the feature set as a part of migration.

Architectural debt

As an application grows, you need to periodically pause and take stock of the direction in which you are moving and do some course correction along the way. At some point during the lifetime of an application, there are some unintended branches and decisions taken which was a deviation from the original design that it was intended to serve.

No matter how hard you try, architecture always gets too complex over time
No matter how hard you try, architecture always gets too complex over time

How do you solve a problem like architectural tech debt?

Your architectural landscape is the foundation on which your entire application stands. Making fundamental changes to your architecture is like trying to remove the bottom most block in a Jenga pyramid. So how do you do it? Slowly and gingerly, one step at a time.

Code Debt

Code debt is what is accrued by simply, badly written code. I’m so proud of this awesome beautiful code I wrote 2 years ago, said a developer never. Who the hell wrote this crap, asked a developer often, before finding how own name in the code commit for 3 years ago.

Don’t listen to your teenager’s poor excuse, but do listen to your engineers
Don’t listen to your teenager’s poor excuse, but do listen to your engineers

How to solve a problem like code debt?

Code debt is the most consistent type of debt that an organization will/should pay off. Developers should be encouraged to follow the scouts rule of leaving the ground a little bit cleaner than they found it. A portion of every sprint must be dedicated to refactoring. Refactoring must be built in to feature development and must be a continuous effort.

Process & Methodologies Debt

The industry is constantly evolving processes and methodologies, along with technologies, in order to optimize productivity in people. Thus we started from traditional project driven models and paradigms like SDLC, to Agile, to Lean. Software development also has evolved in its methodology coming up with techniques and processes to improve quality, decrease defects, increase understanding and happiness within stakeholders and developers alike.

Err..story of our lives
Err..story of our lives

Conclusion

In the above classification of different kinds of technical debt, except for the code debt, which could be to a certain address, addressed due to developer experience, or lack of understanding of the system, all other debts have a bearing on each other.

Engineering lead. Book Nerd. Crazy mom and wife. Learner for always.