“Engineering debt” is a phrase often tossed around in software projects. “Engineering tax,” by comparison, is a phrase I’ve seldom heard. I have no real ability to change the industry’s vernacular, but I believe the latter is far more accurate.
Let’s explore debt and taxes a bit. We’ll ignore software for now, and just talk about money, as the concepts are somewhat fungible.
Debt is more sophisticated than it appears. The basic idea is that we borrows money for a period of time, in exchange for interest coupons. There are many sophisticated manipulations of that basic premise, but we’ll ignore most of them. Why do we borrow money in exchange for interest? We believe we can repay the principal sum and interest at expiry of the instrument or our desired time frame beforehand. Even better is that we might be able to make money beyond the interest coupons and principal.
This brings us to the concept of leverage. If we play our cards correctly, we can borrow money to make more money. We can make more money in both absolute and relative terms, even once we factor in paying off the debt. There are potential downsides to this approach. We can borrow more money than we need. We still make money, but the interest we pay on the money we don’t use has no upside. Far worse is not being able to pay off the debt with the proceeds from using that debt. We either lose money (if we have some to spare), or we’re bankrupt.
Leverage increases our upside potential and decreases our downside risk. Debt is a means to achieve leverage. In fact, it is common to seek a high leverage ratio in order to amplify our upside potential.
Things get weird from there. If we can’t pay our debt, another option might be to borrow more money. Perhaps we can refinance or take advantage of favorable market conditions otherwise. Perhaps we can continue to hold and accumulate debt because we can continue to make higher returns. Many of the healthiest sovereigns, companies, and individuals are constant debtors in favorable conditions.
Taxes are different. Despite the complexities of tax law, taxes are far less sophisticated than debt. When we experience gains or income, we don’t get to keep a certain percentage of that. If we make money, we pay taxes. If we don’t pay taxes, we are penalized and have to pay even more taxes. If we cannot pay our taxes, we can also go bust.
How do these concepts connect? Gains from leverage are taxed. Losses from leverage may provide a tax credit. Paying interest coupons, for that matter, may provide a tax credit. Leverage is optional. Taxes are mandatory.
Meanwhile, Back in Software
A big difference between debt and taxes is intent. We intend to use leverage to achieve great things. We have to pay taxes on what we achieve, whether great or not.
We often undertake large projects or commit numerous incremental changes over time. When we do this, we do not often begin these efforts with the intention of returning to pay our debts after a set amount of time or effort. We are not borrowing something in order to return it, with interest, and still turn a profit. We seldom are able to achieve far greater things via leverage by paying their price at a future date. Engineering debt is not something that often occurs in the wild.
Unlike debt, engineering taxes accumulate as we build and change things. They are not optional. If we don’t pay them, the taxes accumulate and the problems compound. There are no terms to negotiate. There are not sophisticated means to obviate taxes. In the perfect world, about all we can do to avoid them is dispose of code and systems. In reality, this is likely to impose its own tax or to be unpalatable. This goes back to the concept of making money and the more traditional definitions.
This is a semantic debate, but we need to stop incorrect use of debt in an engineering context. Instead, we need to acknowledge that in our work, we accumulate non-discretionary taxes that always come due.