Four Strategies for Managing Technical Debt

Refactoring for Software Design Smells: Managing Technical Debt
The vicious cycle of technical debt

Managing technical debt

The first aspect to manage technical debt is to prevent technical debt from accumulating. It includes increasing awareness within the software development teams about technical debt and introducing relevant processes (such as manual peer review and quality analysis embedded in continuous integration) within the organization.

1. Identify and track the debt

The first step towards repaying technical debt is to know how deep we are in the mud i.e., to identify existing debt. Relevant tools could be employed to identify the concrete debt instances (for instance smells). For example, Designite could be used to identify smells in source code at implementation, design, and architecture granularity. Experienced developers and architects in the team can also identify debt instances.

2. Prioritize smells

Not all debts are the same — different types of debt come with different interest rates. Hence, the identified debt instances must be prioritized for refactoring based on factors such as potential impact of the debt instance on the project. It is practically impossible (in fact, not recommended also) to be 100% “debt free” in real-world projects; it is okay to live with some (low priority) debt to maintain the balance between feature development and technical debt repayment.

3. Plan small refactoring installments in each iteration

It is common in financial domain to pay a large loan in smaller installments. In the same way, it is unlikely for a project team to repay huge technical debt all at once; however, repayment in the form of small installments — ERIs (Equated Release Installments) is quite feasible and practical where a small portion of effort in each iteration is dedicated to refactoring.

4. Motivate and reward people for maintaining quality

“People care about the things that you measure and you reward.”

The technical management must ensure that the software development team is motivated to maintain the quality of the software. If a manager of a software development team measures the number of features (or LOC) delivered or number of defects fixed by the team as the yardstick for their performance, then the team will only focus on adding features and fixing defects. How well it is done is as important as getting it done. Keeping the motivation high and rewarding people for not only developing working code but also quality code is the key strategy in the battle against high technical debt and deteriorating quality.

Related reading

  1. Book — Refactoring for Software Design Smells
  2. A Taxonomy of Software Smells



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Tushar Sharma

Tushar Sharma

Student of life; student for life. Researcher, developer, and (co-)author of 'Refactoring for Software Design Smells'. Asst. prof@DAL.