The common wisdom about debugging suggests that you need to develop a theory of the problem and collect data around that theory. If the data does not match it, you need to revise your theory and try again until all the data fits. This is great in practice, but it goes wrong in two ways.
The first comes from the world of psychology and sociology. People have a weakness in their reasoning that stems from a tendency that normally serves us well: it is difficult to have one's mind changed. If we could be convinced of things too easily, we would fall prey to a number of schemes or simply always be carried along at the whim of whatever ideas we happened to encounter (not that we don't do this too, but that's a different problem). The real problem arises when we hold tightly to our beliefs in the face of overwhelming contrary evidence. Psychologists use the term cognitive dissonance to describe the feeling of our internal beliefs not matching observed data. It's that pit-of-the-stomach feeling that says "oh no, how can it be that I was wrong this whole time?". Rather than experience an unnecessary amount of cognitive dissonance, we instead slightly or even greatly reframe the incoming facts so that we don't have to change either our minds or experience cognitive dissonance.
Confirmation Bias is the technical term to describe that reframing of facts: we are biased to see things in a way that confirms our existing beliefs. Normally it is used to describe problems of social interaction, for example, if you believe that a certain employee where you work is lazy, you will tend to interpret the things they say and do in a way that supports that notion, even after significant counterexamples. If they complete a large, complex task, even spending long hours and late nights on it, you might be inclined to dismiss it by saying "oh, he/she was working with so-and-so who is such a hard worker, otherwise he/she would have never gotten it done", confirming your previous view rather than reevaluating your opinion. It's incredibly insidious and something we should all be on the lookout for.
In the world of debugging, confirmation bias leads the scientific method astray because we are more likely to cling to our theory by reframing the evidence as support rather than throw out the theory and start again. It doesn't help if one starts by just collecting data and then trying to fit a theory. As soon as a theory is presented, we start fitting data to it. I've wasted so much debugging time coming up with more and more elaborate explanations to explain away data rather than give up and start looking around for a new and better theory. When you are spending more time trying to fit facts into your theory than generating new data, take a hard look at that theory and see if you really just succumbing to confirmation bias.
The other big mistake that I see made all the time is the implausible theory. I will step into a debugging situation and say, "tell me what you think the problem is", and the person will lay out a very clear theory that matches all their observed data. The problem is that there is other data readily available that directly contradicts the theory but which they are not including in their analysis. For example, you collect a lot of data about a sudden network performance issue and come to the conclusion that a faulty network card is to blame. You have a lot of nice graphs showing the performance before and after a certain date, and showing how the application runs as expected on another machine. Seems like a decent analysis, until I point out that none of the other applications on the machine have shown any performance change. That information was clearly available for the analysis and quickly eliminates a simple network card issue (although you can't rule out some more complex interaction), but with a kind of blinders on, it gets missed. The result is that you often spend a lot of time putting in a fix and then testing something that simply cannot have any impact so it's a huge time sink. In this example, you might have requisitioned and installed a new network card only to discover absolutely no change, and that is incredibly frustrating not to mention bad for your reputation.
It often happens in desperation, when we just want some theory that actually fits our data and we either willfully or subconsciously ignore key facts. Confirmation bias plays a big role too, as we cling to our implausible theory in the face of contradictory evidence. When you take confirmation bias and implausibility to the extreme, you get what I call the "One-Track Mind". These are the computer people who believe that all computer badness comes from some particular thing, whether it's Windows, Java, databases, video cards, etc. They had some bad experiences a long time ago with whatever it was, and from now on, they will perceive any innocent or even positive operation of their hated target as buggy or incorrect (the confirmation part), and they will immediately blame it when something goes wrong despite tangential or non-existent evidence (the implausibility part). I would stay clear of these people as much as possible and never ask them to help you debug something.
Tommorow: Improbable Theories & Missing Walls