Evolution and progression of debugging prowess
When things break in mysterious ways, developers tend to go through a familiar series of increasingly demanding steps. As experience, skills and even personal networks grow, we can find ourselves diving ever further in the following chain:
- "It must be in my code." -- hours of debugging
- "Okay, it must be somewhere in our codebase." -- days of intense debugging and code spelunking
- "It HAS TO be in the third party libraries" -- days of issue tracker excavations and never-before-enabled profiling runs
- "It can't possibly be in stdlib..." -- more of the same, but now profiling the core runtime libraries
- "Please let this not be a compiler bug" -- we become intensely familiar with mailing list archives
- "I will not debug drivers. I will not debug drivers. I will not debug drivers."
- "I don't even know anyone who could help me figure out the kernel innards."
- "NOBODY understands filesystems!"
- "What do you mean 'firmware edge case'?"
- "Where is my chip lab grade oscilloscope?"
How far have you found yourself?