On “Technical Debt”
“Technical Debt” is a euphemism for Incompetence.
Some will take offense to this, likely because they've employed the term so much in their career that they've become married to it. Their egos are standing firmly on the fuzzy idea it represents; to pull the shag carpet away would prove too disastrous.
The good news for the rest of us is that Incompetence, when looked at squarely and calmly, can be overcome.
I've never heard a Master invoke “Technical Debt”.
Where there is no structural flaw in your technology architecture or code, there is no “Technical Debt.” Master practitioners build technology without structural flaw. Therefore, “Technical Debt” is a term for non-Masters who have no Master to consult.
How do the Masters build technology without structural flaw? They have, through a gauntlet of experience (and, importantly, the right value system), learned how to build have become one who builds their systems from decoupled parts.
We are all imperfect, including the Masters. But the Masters, using their hard-earned one-trick pony, Decoupling, factor the consequences of their imperfections & ignorances apart, draining the risk that any imperfect component or false assumption could bring to their system.¹²
¹ Where there is no constant tax, there is no “Technical Debt”: a flawed component, when properly factored cannot continue to charge you. You simply delete it or replace it. ² This works well, because while we are all imperfect, no one is perfectly imperfect all the time.
“Technical Debt” is orthogonal to flexibility.
Some solutions are heavily generalized, highly flexible, often over-engineered, sometimes not. Other solutions are specific and concrete, hard-coded. The cost (time) tends to be necessarily more for the generalized solution. But “Technical Debt” is orthogonal to this time-sensitive dimension.
Time and “Technical Debt”
Mastery is a long journey: decoupling is a muscle skill; you cannot transfer it by book or online tutorial. It takes years of practice and experience to develop. You have to practice correctly. You must hold the racket the right way. Otherwise you will only become proficient in bad habits.
The necessary time is in the personal growth: the Master knows that there is no necessary tradeoff to be made while steering the ship: between some amorphous “Technical Debt” and time-to-market. For the Master, optimal speed and decoupled technology go hand in hand; the muscle skill is there; for the Master it takes longer to couple.
“Technical Debt” never gets paid off anyway.
“Technical Debt” is the existence of coupling: non-minimal dependencies. The practitioner, by invoking “Technical Debt”, implies that s/he could have created less dependencies had s/he had more time. This is akin to saying I didn't know how to create less dependencies.
This is a failure of competence and will repeat itself the very next week. Dependencies will stack upon dependencies. Last week's “Technical Debt” will be buried under more “Technical Debt”.
The compound interest here is untameable, it always runs amok: this is not debt, it's a life sentence.
Masters are not Masters.
A Master is a Master only if she grows. But a Master that thinks she's a Master does not grow: she has already reached her pinnacle. The fault of the failures around her lie elsewhere. Likely, as “Technical Debt”.
There are few Masters.
There are so few Masters. There could be more. “Technical Debt” needs to be seen for what it is. Incompetence, overcomeable Incompetence. Then the journey to Mastery can begin, and continue.