I personally consider "debugging" (figuring out how something works and how is it broken) a very important skill as a software developer and one that I don't think it is taught explicitly. It is simply left for us to figure it out.
For this reason I wanted to write about it for a while. Specially with examples of real life problems and debugging sessions as I find they are far more useful that simple made up examples.