Recently I inherited a major piece of software. The original model of the software was lost over generations of programmers working over it (though even the "original model" looks a lot broken). There is no unit test in the code. Fortunately, I do not have a requirement to be backward-compatible (oh that would be worse than hell!). I am taking an approach of selective-forceful, selective-restricted approach to refactoring the code. In the past, I've burnt my hands often with trying to change a lot at the same time, and still consider myself tending to do that.
At one occasion, I also solved a bug after a long time of remaining stuck. From that experience I understood that it is important to spend time to find the missing "right hypothesis", rather than keeping trying new things.
I know my next goal should be to create a testsuite asap but currently am inconfident of how to do that. I'd love to use the principles of refactoring dealt within the book "Working Effectively with Legacy Code", but lack the patience and time (or discipline?) to follow the book.
If you would like to provide some debugging tips based on your experiences, please do.