Kinds of Technical Debt
bytesizetheories.com
bytesizetheories.com
* Things you haven't built yet
* Things you shouldn't have built that way
IMO first one is OK, and the second one is what kills you.
OP is absolutely correct to point out you can find tech debt in code, architecture and data, but... That doesn't really help to make general decisions about it, both in handling it once you have it, and in making decisions about accumulating it.
* Things you haven't dealt with.
* Things you shouldn't have dealt with that way.
Try looking at your "emotional debt" (what you go to a talk therapist to talk about) with under this frame, it's pretty handy.
That entropy has a way of sneaking up on you
It’s sort of one level “deeper” that the one you use. For me it is helpful because it allows to work with temporality in decisions on tech debt, ie “do we have time to do this right or do we need to get sh*it done now and pay later”. This is valuable because it allows you to work with tradeoffs in architecture and design.
Tradeoffs are inevitable in SW design and sometimes some thing is gonna be more important that not taking on tech debt [right now]. The important thing is to remember that debt has to be payed off.
I've seen this put slightly differently before: technical debt is like financial debt. Drowning in it is obviously bad, but it has its place, and it's typically unwise to aim to never take on debt.
In my mind I’ve always categorized tech debt as being broader, and including pretty much anything that doesn’t have a direct benefit to our end users. So this can include things like moving our repos from Bitbucket to GitHub, updating a dependency that has a breaking change (e.g. migrating from one version of Bootstrap to another) or even something more significant like changing from a legacy authentication model to something more modern like OIDC. But I wonder if with this mental model I’ve taken it too far.
It is still true that mistakes that are made during early phases of the project are much harder to fix than recent mistakes.
Only after you have a decent understanding of the system you should start building it. There will be many new requests, but most will just be concerned with the UI. If you have the right data model and architecture, those will not be very difficult to solve.
Which kind is left?