
Bad code isn’t technical debt, it’s an unhedged call option (2014) - panarky
http://www.ontechnicaldebt.com/blog/bad-code-isnt-technical-debt-its-an-unhedged-call-option/
======
dang
This article/site seems kind of dodgy in that it doesn't mention the original
post, which dates from 2010:

[https://web.archive.org/web/20111220004305/http://www.higher...](https://web.archive.org/web/20111220004305/http://www.higherorderlogic.com:80/2010/07/bad-
code-isnt-technical-debt-its-an-unhedged-call-option/)

... and was discussed twice on HN:

[https://news.ycombinator.com/item?id=1541211](https://news.ycombinator.com/item?id=1541211)

[https://news.ycombinator.com/item?id=8777237](https://news.ycombinator.com/item?id=8777237)

------
lootsauce
I think it's useful to try to think about software development in economic
terms. Metaphorically is it more like a call option or or is it more like a
debt? In my mind they are both the same thing. Unless you want to be pedantic
about it in which case, well it's neither, its software. But if not then Real
Options is what we're talking about [1]

Two fundamental themes in economic thought are the value of optionality
(opportunity cost aka options pricing) and the value of something in hand vs
having it later (cost of risk, aka interest rates on debt).

Everyone determines this for themselves and behaves accordingly creating a
market. One persons cost is another value, people see the world in different
ways and have different desires so they come up with opposite positions and
thus a deal is struck. Wait a tick, that sounds very similar. Thats because
debt is an option. To the debtor it is a call option on the value of money now
vs later. To the lender it is a put on the value of money now vs later. An
interesting thing is that they are often both right. And it is the pricing of
risk that rounds out the equasion.

My home mortgage is debt, yes, but ostensibly I did not go into that financial
arrangement for the privilege of making payments and doing maintenance for 30
years. I did so because the optionality it provided was more valuable in my
mind than the alternatives. I was bullish on home ownership as a benefit to me
vs the cost of the debt long term. Inversely the bank had few other options
with as-desirable a risk/reward profile aka yield. They were bullish on my
ability to pay the debt or recoup it via reselling the asset if I defaulted.
They were placing a put on their money in-hand seeing it's value going down
over time. If they did not invest it or lend it out to gain yield it would
lose value via inflation. Both of us are making assessments of value and risk
and both of us are happy because both of us have different time horizons and
different needs. I’ts actually a beutiful thing. The loan is a Real Option.

From wikipedia: A real option itself, is the right—but not the obligation—to
undertake certain business initiatives, such as deferring, abandoning,
expanding, staging, or contracting a capital investment project. For example,
the opportunity to invest in the expansion of a firm's factory, or
alternatively to sell the factory, is a real call or put option, respectively.

I think the decisions we make every day are all Real Options. We all make resk
reward tradeoff decisions all the time involving how we value our limited time
and our limited ability to predict the future. Software development is no
different.

[1]
[https://en.wikipedia.org/wiki/Real_options_valuation](https://en.wikipedia.org/wiki/Real_options_valuation)

------
joshribakoff
Isn't a call option really a call bond, and a bond is an instrument of
indebtedness.

This article has typos & I fail to understand what they're trying to say,
specifically this part:

> If that code is never called upon again than it would have been foolish to
> clean it up in the first place. However, lets say a radical new feature is
> going to added – these quick fixes and become very expensive to deal with.
> Time has to be taken to fix these issues right before deadline or no one on
> the team remembers pertinent information need for the code to make sense in
> the first place

Ignoring the fact this is full of grammatical errors & makes no sense, the
"call option" metahphor implies I may have to cleanup an entire codebase at
some unknown point in time, which isn't true -- its always possible to shoe
horn in more quick fixes instead, just like you could pay off a credit card
with a cash advanced from another credit card, going further into debt. So
Debt is the more appropriate metaphor in my opinion.

> The problem with technical debt as a metaphor is that for managers debt can
> be a good thing

But technical debt _can_ be a good thing. And so can a call option, if it
never gets called. The article itself points out you may find out later on
that you do not even need the code after all, and therefore any cleanup would
have been wasted effort. The author is grasping for a metaphor to make
technical debt sound more evil than it probably is. No one is going to force
you to cleanup your code. You still have the choice of adding more messy code,
and going further into debt. Because you have that choice, its just debt, not
a call option. Debt, including technical debt, can be a good or a bad thing.
Just like real debt, technical debt can be used as a growth hack. If you can
write some crappy code that makes you a million dollars, you can go back & pay
someone to clean it up later. Its not inherently evil.

A call option would be a good metaphor for a security problem. For example an
Equifax programmer may have pointed out the leak to his boss, who said let's
spend time on new features & instead ignore the security problem [therefore
giving out a call option to the public, for short term financial gain]. Then
some hacker from the general public came along & called the option, by
exploiting the leak. Now Equifax has to pay up. So technical debt is not a
call option, security issues are call options.

Since writing messy code has been shown to correlated with bugs & security
problems, I guess you could actually argue that messy code is a call option
because it might get exploited, or crash production... both of which are a
loss.

Although a liability would be more appropriate metaphor, because you can
eliminate liabilities as you gain new information... your product starts
becoming more popular over time. A call option cannot be canceled just because
of a market uptick. Messy code can be eliminated as your product's market is
validated.

