Pragmatic Programming

August 15, 2004

I mentioned in a previous post that I recommended Andrew Hunt of pragmatic programmer fame to speak at our group offsite. He happens to live in the area, which makes it very cost effective. I have to admit I didn't know much about these guys until I ran across their How To Keep Your Job presentation last year when I was searching for information on the offshoring trend. It's definitely the best single treatment of the offshoring topic, so I was very happy to have Andy give the presentation and elaborate on some of the specifics in person.

While he was here, I also had him autograph my copy of The Pragmatic Programmer:

book autograph: 'It's because of developers like you that off-shoring works! :) Andy'

It's because of developers like you that off-shoring works! :) Andy
Before you start wondering, I asked him to write that. It's funny because it's true.

The Pragmatic Programmer is a great book, and will definitely work its way into my recommended reading list. It's just so damn.. pragmatic. Here's an excerpt from the book on the Broken Window Theory. I observe this every day at work, and I never recognized what it was until I read about it in Andy and Dave's book:

In inner cities, some buildings are beautiful and clean, while others are rotting hulks. Why? Researchers in the field of crime and urban decay discovered a fascinating trigger mechanism, one that very quickly turns a clean, intact, inhabited building into a smashed and abandoned derelict: a broken window.

One broken window, left unrepaired for any substantial length of time, instills in the inhabitants of the building a sense of abandonment -- a sense that the powers that be don't care about the building. So another window gets broken. People start littering. Graffiti appears. Serious structural damage begins. In a relatively short space of time, the building becomes damaged beyond the owner's desire to fix it. and the sense of abandonment becomes reality.

The "Broken Window Theory" has inspired police departments in New York and other major cities to crack down on the small stuff in order to keep out the big stuff. It works: keeping on top of broken windows, graffiti, and other small infractions has reduced the serious crime level.

Don't leave "broken windows" (bad designs, wrong decisions, or poor code) unrepaired. Fix each one as soon as it is discovered. If there is insufficient time to fix it properly, then board it up. Perhaps you can comment out the offending code, or display a "Not Implemented" message, or substitute dummy data instead. Take some action to prevent further damage and to show that you're on top of the situation.

We've seen clean, functional systems deteriorate pretty quickly once windows start breaking. There are other factors that can contribute to software rot, and we'll touch on some of them elsewhere, but neglect accelerates the rot faster than any other factor.

You may be thinking that no one has the time to go around cleaning up all the broken glass of a project. If you continue to think like that, then you'd better plan on getting a dumpster, or moving to another neighborhood. Don't let entropy win.

If you enjoyed that, you may also enjoy

.. and you'll want to own a copy of the book.

Update: I mirrored the original 1982 Atlantic Monthly "Broken Windows" article that the Broken Window theory is derived from.

Posted by Jeff Atwood
4 Comments

I've noticed recently that Microsoft has been on a real hiring spree-- hiring some of the best and brightest bloggers around, from many different backgrounds. They seem to be totally committed to .NET, now more than ever.

As for the quality of their documentation and its relationship to outsourcing/offshoring, I'm not sure. It benefits all developers, everywhere. The problem with internet is that it offers the same resources to everyone worldwide-- we don't gain any advantage by being "local" to where this information is created.. Seattle, or even the USA. It's simply more people competing for the same jobs. So I guess if there is any lesson here, it is to aggressively leverage any benefits of locality: work closely with customers, get to know them, be responsive and "in person", etcetera.

Now, if we could just get rid of this pesky internet and solve the offshoring problem once and for all...

Jeff Atwood on August 16, 2004 2:15 AM

Great Post Jeff I just forwarded your postings to all of the guys on our team. One thing I have noticed though is Microsoft seems to be sensitive to this shift in outsourcing. Seems in the last year or so they've done a better job in showing there code in use (not just useless MSDN examples). What do you think ?

Aaron on August 16, 2004 1:57 PM

You may be thinking that no one has the time to go around cleaning up all the broken glass of a project. If you continue to think like that, then you'd better plan on getting a dumpster, or moving to another neighborhood. Don't let entropy win.
http://pogonyaem.ru/

Oskar on February 7, 2009 1:52 AM

I take a slightly different approach, although mostly the same.

When I see a bad decision that is somewhat in line with what I'm fixing, I fix it. If in doing so I uncover worse stuff (say, when fixing the window you find the burning is full of broken windows) I tend to make it smell as badly as I can, insofar as to instill anybody working on that bit to not doubt refactoring it. I'm being paid for delivering good software, but fixing up all the design errors from the past with the first use case is not the right approach. Boarding it up is also not the right approach - people tend to leave stuff that looks "okay-ish" or "marked with a TODO:" as something that remains to be done.

Peter Bindels on July 12, 2009 10:55 AM

The comments to this entry are closed.