Some sound economic thinking lies behind Extreme Programming, or at least validates XP. I’ve talked about reversibility, for example.
Another economic concept, but one that required me more work to turn into intuition, is the idea of a basket of options. Here, with exercises, is the basket of options. I never work through the exercises while I’m reading, but I hope you will. It was only through repetition in detail that I was able to bake this idea into my brain.
Option
Let’s say you have an egg. We’ll ignore how you got it. You have an egg. It’s worth $5 (nice egg!). What happens to the value of your egg if the egg price goes down by a dollar? The value goes down by a dollar. Price goes up a dollar, value goes up a dollar.
Earning a dollar is great. Losing a dollar, not so much. How can we change this picture so we win when we win but we don’t lose when we lose?
What if, instead of an egg, we have a piece of paper promising we can buy an egg for $5. (Again, we’ll ignore who we got this piece of paper from.) Now if the price goes up, the value of our “portfolio” goes up. If the price of the egg goes down, so sad, we’ll just kiss the piece of paper bye bye 👋.
Happy days! We benefit from good news but we’re insulated from bad news.
Basket
Savvy investors that we are, we want a diverse portfolio. We also want a bar of silver. (We’ll get to software development at the end, I promise.) If we have an egg & a bar of silver, what happens to the value of our holding in the various combinations of price changes?
Here’s where the exercises kick, the kind of exercises that I need to reframe my brain. Fill out the four quadrants.
I’m going to assume you didn’t, because I wouldn’t as a first-time reader. It’s okay. You can come back later. Here is the value of our portfolio in the various scenarios:
We don’t like that big ol’ -2. What if we use the same piece of paper trick?
Again, work it out. Again, I’ll assume you didn’t. Here’s the answer:
Yes! 👏 We turned that ugly ol’ -2 into a 0. If both prices go down, we recycle the piece of paper & whistle on down the road. If one price goes down & one goes up they cancel out. If both prices go up, we use the piece of paper & profit.
Mixed News?
It’s a pity, though, that when egg prices go up we can’t profit. Is there anything we can do? Let’s tweak our paper writing strategy. Instead of one piece of paper applying to both items, what if we have 2 pieces of paper?
(Work it out. Really. It’s good for you.) Okay, okay:
Now we’ve done it! If either price goes up, the total value goes up. One price goes up & one price goes down, we use the valuable piece of paper & discard the other one. Both prices go up, we use them both & buy the good champagne that night. Both prices go down, we haven’t lost anything (except the hitherto-ignored price of the pieces of paper).
Bundles of Options
What we’ve done here is use the economic dictum, attributed to Nobel Prize winner Robert Merton, “A bundle of options is worth more than options on a bundle”.
What does this have to do with software? Far more than I can go into here. To start with, though, we can make sure that the optionality we create in Empirical Software Design is a bundle of options. Every time we decouple, we create options in 2 different directions. We can now change one element without changing the other.
We have, in essence, created 2 pieces of paper saying, “You can change X” & “You can change Y”.
The pieces of paper aren’t free. We invest in the structure of the system to create them. Then, when we want to use them they aren’t free to “exercise”. But the basic relationship holds—the more we can create bundles of options, the more value we create. And that value comes in likeliest scenario—something went right & something went wrong.
I never do exercises when reading either, but I did this time. Great post!
As I worked through the exercises, I started thinking about how much each option is worth. Interestingly, it seems that the value of the options depends on the volatility of the price, not the absolute price. Does that imply that the less certain we are about the future of our software, the more we should invest in design?
This is the most user-friendly explanation on options I've seen.