While I don't consider myself an economic genius, I like to think that I have an understanding of base principles*. I understand that – like almost anyone else – my resources are measurably finite. I have a bank account that tends to go down more often than it goes up and I have a clock that ticks away the seconds and minutes. It's because of all of this that a lack of basic logic drives me nuts…. like the Broken Window Fallacy.
To put it simply (my paraphrasing):
If a branch breaks my window, numerous things happen. I spend more money at Home Depot buying a new window. I spend more money on gas to get the window. I probably pay someone to install the window. And all of those people have more money to spend. Therefore, it is a net good for the economy.
Bzzt. Wrong. And here's the problem:
I could have bought coffee at my favorite local coffee shop.
I could have invested it. I could have given it to the bell ringers at Christmas time. If I didn't have to fix my window, I could have used that money/time/effort on a variety of things to move myself or someone else forward.
The Broken Window Fallacy conveniently leaves out the fact that I suffer as a result. That I have to spend all that effort just to return to the status quo.
So how does this apply to software?
For example – hypothetically – what would happen if an organization decided to re-write/restructure their software from the ground up? The argument is always "we can do it better/faster/easier this time because we know/have/understand X!" That is quite possible, but it almost always leaves out a number of externalities:
What happens to previously supported add-on software?
What happens to customers heavily invested in the current solution and/or seeking support for it?
What happens if (when?) you take significantly longer than expected?
What happens if (when?) you're wrong and you can't do it better?
What happens when your customers/users move on to a new product instead of waiting for yours?
All of that said, there are a number of times where it might make sense to rip apart and refactor pieces. In a relatively good piece of software you can do it. Even in a mediocre piece of software, you can start cleaning things up and get to that point. But it makes no sense to rip something apart that works as expected and replace it with something completely new. That's not working smarter. That's just working harder to maintain the status quo.
Then again, maybe I'm wrong… just because Microsoft, Netscape, Coca Cola, the FBI, and countless other companies can't do it, maybe you can. But I'm with Joel Spolsky on this one.
* If you're really interested in an understanding of economics or just happen to be an economic geek like myself, check out the Austrian School. Just remember that it's not our fault that we're right. 😉