But I'm a very strong believer in fixing all bugs, even minor bugs, if at all possible, and, for me at least, this belief is deeply rooted in a theory of social behavior known as the Broken Windows Theory. This theory dates from a famous 30-year-old article published in the Atlantic magazine, by George Kelling and James Wilson, in which they report on several long and detailed studies of neighborhood policing. In the article, Kelling and Wilson observe:
Social psychologists and police officers tend to agree that if a window in a building is broken and is left unrepaired, all the rest of the windows will soon be broken. This is as true in nice neighborhoods as in rundown ones. Window-breaking does not necessarily occur on a large scale because some areas are inhabited by determined window-breakers whereas others are populated by window-lovers; rather, one unrepaired broken window is a signal that no one cares, and so breaking more windows costs nothing.
This is an incredibly important observation, and I believe that it's deeply and fundamentally true.
Moreover, I believe that it's deeply and fundamentally true about software, just as it is about neighborhoods:
one unrepaired broken window is a signal that no one cares
Replace "broken window" with "software defect", in that conclusion, and you'll see what I mean.
So, that's why I get passionate about fixing bugs. But, how do we manage the risk?
Well, here is where I get up on my soapbox with my second passionate opinion about software: test Test TEST! As Kent Beck says,
Never write a line of code without a failing test.
It's very hard to follow this discipline, but it gets easier the more you do it. And, in the end, you'll find that it makes your programming more fun, as well as more successful and productive, if you just follow the basic Martin Fowler-based rules:
- Don't be afraid to change the software
- Integrate early, integrate often
- Always write a test
- Always run your tests
- Always pay attention when your tests fail
- Repair your broken windows
Climbing down off my soapbox now, and heading for the mountains to think about things other than software for a week...