On good tech debt
Buying a home — AKA creating a massive list of homes you're interested in, going to open houses, clicking through virtual Zillow tours, narrowing it down to two homes, and then losing to all cash offers that were over asking price.
That's the process my wife and I went through last year. We’re all fighting over these homes for the right to pay a bank 3%+ interest on a massive debt. Why? For starters, everyone needs a place to live. Home demand soared during the pandemic as we quarantined in our small apartments and cheap interest rates fueled the increase even further.
We're not going to talk about homes in this post, but rather debt. Specifically, we'll take a look at tech debt and compare it to other types of more familiar debt.
We decided to build after getting outbid so many times.
Debt generally feels bad. When we signed our names on the dotted line agreeing to pay back a massive amount of money over the next 30 years I cringed.
My instincts are to avoid debt at all costs. But our instincts aren’t always right.
I'm realizing the same thing while transitioning my side projects to be more business, less project. This means getting out of my developer mindset and into my entrepreneur mindset, which can be really tough.
I tweeted a list of things that were hardest for me, and a software engineer replied to my first bullet, "tech debt is good".
I think this point is worth expanding on, as my instinct is to side with Rodrigo here.
Just like regular debt, tech debt feels bad. But as I mentioned earlier, not all debt is created equal.
There are two categories of debt:
- Good debt
- Bad debt
Good debt can help you, bad debt generally hurts you. This article from Investopedia titled Good Debt vs. Bad Debt talks about some of the nuances, but their summary is perfect for this discussion:
Good debt has the potential to increase your net worth or enhance your life in an important way. Bad debt involves borrowing money to purchase rapidly depreciating assets or only for the purpose of consumption. Determining whether a debt is good or bad sometimes depends on an individual's financial situation, including how much they can afford to lose. — Good Debt vs. Bad Debt
So how do we decide if something is "good debt"? Well it's a little tricky. Let's look into a mortgage as an example.
The general answer is yes, but there are lots of qualifying factors to that yes.
And if debt is scary, why use a mortgage at all?
For starters, it would take a very long time to save up enough cash to buy a home. According to Zillow, the typical home in Travis County (Austin, TX) goes for $506,074. I'd have to skip out on quite a few lattes to save that much money.
Debt is simply a financial tool to move up your future earnings to the present moment with a slight fee. If you can afford the fees and you're using the debt to pay for an asset, it's likely considered good debt.
Questions to figure out if a loan is good debt:
- Am I going to be able to repay this loan?
- Will this strain my finances?
- Do I already have lots of other debt?
- Am I going to stay in this house for 3-5 years or more?
- What’s my credit score?
- Is this a depreciating asset (car, clothing, computer)?
Many financial advisers will tell you that the amount you can spend on a house should be guided by your debt-to-income ratio (DTI).
Use this cool calculator from NerdWallet as a good starting point:
If you're within your budget, have a good credit score, and plan not to move for awhile, there's a chance a home is a great investment for you. This would be considered good debt.
What would be considered bad debt? There's a common phrase "buying more house than you can afford" that speaks to exactly that. If you're stretching your debt-to-income ratio, creating monthly payments that are too high, or paying insane interest rates, buying a home can be considered bad debt.
Tech debt is simply a subset of regular debt, but instead of borrowing from our future earnings, we're borrowing from our future dev time.
Tech debt is borrowing from your future company dev time. If the company doesn’t exist in a year you get to declare bankruptcy on that debt for free. If you’re still around, you’ll surely be better at engineering and can handle the debt then.
Good tech debt can be a tool used to save money, time, and effort. I've previously written about how only 30% of incorporated businesses make it to the 10 year mark and barely over half make it to five years.
If businesses are only making it this far, how long do you think the feature you're about to code will last? If it's a greenfield project you're working on, what are the odds the project finds product-market-fit?
We're talking about the decisions that live in quadrant one of Martin Fowler's Technical Debt Quadrant — deliberate and prudent debt. Because we need feedback from the market, we need to ship. Like I said earlier, you are likely not your target customer. De-risking your project as quickly as possible should be the goal, not having the cleanest code. Why? You might throw all of the code away.
Deliberate and prudent technical debt is most likely "good tech debt". Deliberate and reckless technical debt can end up being good, but is more of a gamble.
I've worked at several companies where entire codebases have been thrown away, complete projects killed, and entire departments laid off. This is the reality for most projects. Very few businesses make it to the default alive state.
Business is a lot like batting in baseball, winning one out of three times is considered phenomenal.
Assume one in three features/projects sticks around, does that change you how think about tech debt?
Instead of being scared of tech debt, think of it as a tool to borrow from your future dev time. If your business or project succeeds, great. You should be able to pay down the loan. If it fails? Throw away the code and know you saved yourself time and frustration.
If you do succeed and your project lives, you will have more experience, there will be fewer unknown variables, and you'll be better equipped to solve the technical challenges ahead of you.
If you take a shortcut, and the project fails due to non-technical reasons, was it a shortcut?
So go forth and write scrappy code in your new projects (you'll be able to get rid of it later if your project is still around).
This is not permission to add tech debt in proven units of the business. There is bad tech debt, and it largely looks like bad financial debt. It will slow you down, stop you from hitting your goals, and weigh on your motivation. Pay down this debt aggressively, the same way you'd aggressively pay down credit card debt.
- U.S. Bureau of Labor Statistics data
- I previously wrote How I Pick My Tech Stack for Side Projects
- House calculator from NerdWallet
- Good Debt vs. Bad Debt
- Martin Fowler's Technical Debt Quadrant