This graphic depicts Martin’s idea of “Technical Debt Quadrants”. The basic idea is that accruals of technical debt can be deliberate or inadvertent, reckless or prudent, or some mix of each.
Deliberate accruals of technical debt are an unfortunate reality. External pressures such as deadlines, shifting requirements, and client demands for progress updates sometimes puts software teams in a situation where they are forced to fudge something but are in the unenviable position that they know it is bad while they are doing it. Whether reckless or prudent, there is little excuse for not immediately paying deliberate accruals of technical debt back at the earliest convenience. Project managers should be pragmatic enough to tactically take on this type of debt but should also be careful to ensure it is resolved when the crunch is over, lest they pay interest on the debt later.
Inadvertent accruals of technical debt are more innocent, however generally they have a much higher impact on the quality of the software or system due to the fact that the debt may not be discovered until it has accrued significant interest. If programmers are working around a technical debt accrued early in the project the effects of the debt will cascade through the rest of the system and will thus be much more difficult and costly to remove when it is discovered.
As even the most senior software developers will tell you, a certain amount of inadvertent technical debt is inevitable. Many times the ideal design doesn’t become obvious until a significant amount of code is written. When these situations arise, project managers and lead architects have a difficult decision to make; refactor the code to avoid paying interest later, or move forward and deal with the consequences as they come up. This is always a difficult decision and may things need to be considered, including the scale of the system, the expected longevity, the amount of anticipated support and/or future modifications, and the remaining schedule and budget should all be considered.
Frankly, to a large extent you simply can’t avoid technical debt. You can, however, largely avoid paying interest on technical debt.
The key is to acknowledge the existence of the phenomenon, and to understand the different manifestations and what causes them. With this information you can learn to identify when there has been an accrual and, most importantly, you can pay it off in a timely manner before it grows out of control.
Reposted from my original LinkedIn post here.