On Debugging

No matter how fast you can code or how good you can code (let's put aside for a moment what consists of "good" code), all your efforts will come down to how well you can debug.

Debugging is the ultimate test of a good programmer. Some would think debugging is this cake toppings thing, one step before delivery. Truth is debugging permeates the whole lifecycle of software. Sometimes more debugging follows after delivery.

I run into the passage in Mike Gunderloy's Painless Project Management with Fogbugz (Joel Spolsky's Foreword):

There's a restaurant in my New York City neighborhood called Isabella's that's always packed.

Isabella's is thoroughly and completely debugged.

Eventually, Isabella's became a fabulously profitable and successful restaurant, not because of its food, but because it was debugged. Just getting what we programmers call "the edge cases" right was sufficient to keep people coming back, and telling their friends, and that's enough to overcome a review where the New York Times calls your food "not very good."

Great products are great because they're deeply debugged. Restaurants, software, it's all the same.

If there's any virtue that is desirable of a programmer, that's pretty much it.