> Technical debt, on the other hand, is quite literally a form of debt. You borrow time from the future by developing a solution that requires less work now, but that will need to be changed later on because it won't be enough future requisites, and that will create additional work (interest) in the long term while it's present
It is all just a words game. If there is an issue now, and I do a hotfix and hardcode some stuff that surely will need work later on to keep things working, then:
A) I created technical debt. I took the quick route now, but will have to spend more time in the future if I want to update this code.
B) I did maintenance. A thing was not working and I made it work. This is a simple, small bugfix, a.k.a. maintenance. In the future we might have to spend some time to keep things working in slightly different conditions. We also call that maintenance.
Both ways of phrasing it can help to communicate a message. But there is no use in getting hung up on what to call it. Your job as a developer is to be smart about it and choose the best possible trade-off. You need to do that in both versions equally.
Maintenance and technical debt are intertwined, but I don't think it's just a words game. Things without a name are less visible, and maintenance and technical debt are different.
There's maintenance unrelated to technical debt, and technical debt unrelated to maintenance. Taking into account the technical debt you have helps you when estimating the cost of maintenance and new features, or to understand the possible problems when new environments come into play.
IMHO, part of being smart about it is having the words to communicate the concepts clearly, it's not a moot discussion.
Technical debt it's literally dollars to donuts in time spent getting yourself out of the hole you are in right now.
Maintenance is the cost of keeping the lights on.
I run a two year old system which is now riddled with technical debt. How we got here has very little to do with the technology decision, stack, code, and a lot to do with management outsourcing and cost cutting.
Technical debt is never paid back through maintenance. It's just conceptionally wrong to tie them together. To phase better I can't maintenance my self out of this problem, but I can keep this system running forever with little to no cost.
Your B) example is not maintenance, it’s bug fixing. Maintenance is doing things like running backups, patching the OS, or updating code to work with a newer version of some library you’re using.
It is all just a words game. If there is an issue now, and I do a hotfix and hardcode some stuff that surely will need work later on to keep things working, then:
A) I created technical debt. I took the quick route now, but will have to spend more time in the future if I want to update this code.
B) I did maintenance. A thing was not working and I made it work. This is a simple, small bugfix, a.k.a. maintenance. In the future we might have to spend some time to keep things working in slightly different conditions. We also call that maintenance.
Both ways of phrasing it can help to communicate a message. But there is no use in getting hung up on what to call it. Your job as a developer is to be smart about it and choose the best possible trade-off. You need to do that in both versions equally.