I have to say I must agree with Lew's use of the term here. To my ear,
it doesn't make sense to exclude issues arising from the datedness of
the codebase from the concept "technical debt."
Issues such as workarounds for old bugs in compilers or libraries, the
use of outmoded software idioms, failure to adhere to today's best
practices, roll-your-own implementations of functionality that has
since been covered by mature, widely adopted libraries -- once you
bring the code back out into the open and blow the dust off it, these
all affect the software development in the same way as "ordinary"
technical debt.
I don't agree with Lew's view that it's necessarily bad software
development to let sleeping dogs lie. It comes down to a cost /
benefit calculation -- the cost of up-to-dateing a non-trivial
software project can be significant and the benefits might not be. It
depends on the size and age of the project and on why you're dragging
it back into the light.
(For particularly large projects, it might not going to be _possible_
to keep the entire project up-to-date with current best-practices and
idioms. It'll be like painting a major bridge -- by the time you've
painted your way to the far side, it'll be time to start on the near
side again.)
Let's cast blame where blame is due.
The way I see it, there are several forms of technical debt involved
here, with a codebase X written in language Lang1.0 with libraries
Libs1.0, that transitions across language and API changes to language
Lang2.0 and libraries Libs2.0.
There is technical debt associated with the application, but there is
also technical debt associated with the language and official libraries.
If the language originally caused you to write your own libraries to do
a bunch of things, the ongoing maintenance associated with those
libraries is actually technical debt that is _primarily_ down to the
people who wrote the language and the official libraries. Assuming good
practices in writing those custom libraries with the available tools,
there is only a small fraction of technical debt at that stage that is
down to the application developers.
When the language and API transition occurs to Lang2.0 and Libs2.0, the
language and official library writers have actually paid down a portion
of *their* technical debt. But this only helps new work that avails
itself of the new stuff.
The technical debt in the _existing application_, that which is
specifically incurred by the language and official library writers, will
never be paid down by those people. It's up to other people to pay that off.
The application developers - that means us - don't actually care who
incurred the technical debt. Anyone who has ever worked with an early
language or early APIs or early tools surely can appreciate that there's
a load of debt being incurred by use of all of those - and it's not
*our* fault. We _know_ that there will be upgrades in the future, and
we'll be able to rewrite and re-configure to reduce the debt.
The point being, overall technical debt at any point is a combination of
debt incurred by every nut and bolt, and you yourself potentially caused
little of it. You, however, will likely do more than your fair share of
the work to pay it down.
AHS