Rules of Engagement in Troubleshooting Bugs

When troubleshooting software bugs I follow these simple rules

1) Try to first understand the system from beginning to end, ask questions until you feel like you understand it.
2) Do not trust what anyone else says, verify it for yourself. (watch HTTP traffic with LiveHTTPHeaders, watch TCP traffic with tcpdump)
3) Make assertions, ie assert(A has to be true if B is true), to isolate the bug
4) Don’t make assumptions
5) Have confidence in your own code, don’t assume there is something wrong on your end, assume that it’s someone else’s problem first especially if it’s something that has been working for a long time
6) Talk it out, talk about your assumptions, talk to yourself, talk to people around you and if it’s wrong, you’ll notice it pretty quickly
7) Don’t panic, computers are stupid, you are smarter than computers
8) There is always a reason why something is broken, there is no magic in computers
9) Isolate the problem, trap it and stomp on it
10) Don’t be frustrated, treat hard problems as a game of detection.

Have fun!