This is a list of books currently on my To Read shelf... literally. I do not suggest or anti-suggest any of them at this time as I haven't read them yet.
Current Efforts:
Blue Parabola, LLC
CaseyMultiMedia
web2Project
PHP'ers:
Ben Ramsey
Brandon Savage
Cal Evans
Eli White
Elizabeth Naramore
Joe LeBlanc
Matthew Turland
Matthew Weier O'Phinney
Planet PHP
Tony Bibbs
DC Social Media:
Aaron Brazell
Jessie X
Shashi B
Business/mISV:
Bob Walsh
Eric Sink
Gavin Bowman
Guy Kawasaki
Joel Spolsky
Micah Baldwin
Paul Graham
Planet mISV
Past Projects:
CodeSnipers
HOBY
Judicial Watch
mobile FoxNews.com
NRTW
Great Tools I use:
Drupal
phpUnit
Subversion
Zend Framework
This is not the home of dotProject or web2project. It is the home of CaseySoftware, LLC. Any dotProject support questions should be referred to their support forums.
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. ;)
Preach it to the choir!
I completely agree with your points Keith ... and thank you for pointing out the post by Joel, I had actually never read it ...
I'm mentioning it, as well as your post in a post on my blog (The benefits of not rewriting software from scratch) to help spread the word.
Broken Window Fallacy
I agree with your point that rewriting from scratch is often a bad idea. Rewriting from scratch is the dusty desert of the real where many software projects go and are never seen again.
But (and there's always a but) I don't think the broken window theory applies to from-scratch rewrites. Rewriting from scratch is a hard reset for a software project. It's cleaning the slate and starting again. The broken window theory describes an insidious rot from within that slowly infests code and progressively chokes off all hope of forward progress. The way I understand it, the broken window theory describes how a building, software system, or any other entity in slow decay will see that decay accelerate over time if the decay is not addressed. The mounting decay causes apathy and lack of interest which fosters further decay.
It's a function of how human behavior works. When a building has broken windows and no-one fixes them, it's psychologically easier to justify tagging the building with graffiti because the building is already run down. I've seen this same mindset in effect on software teams when the code degenerates into a lump of quick n' dirty hackish code. If no-one cleans up the messes it gets easier for people to justify making more of them. And the longer it goes on the messier the code gets. And the messier the code gets the harder it is to make deadlines, release bug-free features, and just generally make forward progress.
At the end of this path is the software team throwing up their hands and proclaiming "we have to rewrite the whole thing!" and then the project is subject to the don't-rewrite-from-scratch rule. IMHO, the whole thing could've been avoided, or at least substantially delayed, if people pay attention to the broken window theory.
On Broken Windows...
Actually, what you're thinking of is the "Fixing Broken Windows" analogy that the Pragmatic Programmers (Andy Hunt and Dave Thomas) have been hammering on for a few years.
That analogy is focused on maintaining certain "community standards" to the codebase and the risks that come along with not enforcing those standards. While both involve windows, that's where the similarities end.
Post new comment