All debt starts as an agreement between a borrower and a lender. The lender has something of value which they give to the borrower with the assumption it will be “paid back.”
When a debt exists between two independent parties, the lender and borrower have a clear relationship. But technical debt is a little more tricky...
Who’s the lender? The customer? The product owner? A more productive future, you?
What’s the agreement? What’s being paid back? For how much? And by when? Is it clear what happens if it’s not paid back on time? Declare bankruptcy?
Who holds everyone accountable? Can the lender deny the borrower at a later date if they fail to pay back a past debt?
Technical debt is unique in that, initially, the lender and the borrower always start as the same. While others may feel the downward impact of unpaid “debt,” the choice to lend productivity, quality, etc., is the borrower's choice.
Payment is variable, too. “It works” and "It will last, for now" is a form of payment.
Given enough time and justification, technical debt can feel like it magically goes away. But, the cost of technical debt, left unpaid, will almost certain transfer.
If technical debt creates a poor experience - slow performance, inefficiency, partial completeness, data loss - then we inevitably push the debt along to someone else, forcing us to accept the cost of collateral damage; we assume that losing customers to a more performant, more efficient, and more complete product is acceptable.
But what about our team? We accept the same. We force ourselves to accept losing team members due to a frustrating workflow, out of date technology, unfulfilling and uninteresting problems, and incomplete work.
All debt starts with an agreement. All debt has a cost. But technical debt is unique. The agreement is fluid and the cost is unclear but felt over time. However, there's a choice...
If the cost is worth it, then it's for you to accept; otherwise, it’s bad debt, and the faster you pay it back, the less it will cost you.
| Photo by Yung Chang