I don’t know if this is a ‘guilty’ confession or not, but I love debugging hard problems in software systems.

Some of these problems took a long time to debug. Now when someone describes a particularly interesting situation I smile and say, “that sounds like a Two Week Problem.” The two weeks describes the amount of time to investigate the situation and narrow to a set of probable causes.

Sometimes, finding the needles in a large haystack is the hardest part of solving a problem. Debugging is also a skill you can learn and develop.

How I got there

I feel confident in bounding the investigation process, even for urgent and high stakes problems, because I specifically invested in:

  1. learning structured techniques to investigating and analyzing problems
  2. practicing these techniques with low urgency, low stakes problems
Debugging Rules! in my office

The single most helpful resource I used to learn to debug is David Agans’ wonderful book, Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems. The book teaches you a structured process of debugging hard problems using an easy, fun narrative that takes you through the application of each rule.

The Debugging Rules are:

  1. Understand the system
  2. Make it fail
  3. Quit thinking and look
  4. Divide and conquer
  5. Change one thing at a time
  6. Keep an audit trail
  7. Check the plug
  8. Get a fresh view
  9. If you didn’t fix it, it ain’t fixed

The poster shown above is available in high resolution formats from the debuggingrules.com website linked above. I’ve kept a copy of this poster within my work field of vision and posted it in my teams’ offices for 15 years.

Don’t worry about the early-2000s look, the principles are timeless and it’s currently ranked #3 in ‘Computer Programming Debugging’ category on Amazon.

If you’re looking to improve your own debugging skills this weekend, this might be just the ticket.

Then next week put up the poster and start practicing.