Often, when starting a new job, I've had to dive into poorly structured legacy code. To understand it, I'll take some scenario, and try to trace it through the code. On finding a suspect routine, I
used to stop and look for callers, and then backtrack into them. I stopped doing this a couple of years ago after learning that I'd just spent the better part of a week examining unreachable ("oh, we stopped using that stuff a while back") code. Bah!
Oh, and I get burned by naming a program/script test about once a year. On Unix systems, this can be a momentary heart-stopper.