Personally, when troubleshooting software, I've always found that stating assumptions, testing them both for false and true values, and writing the results down, makes for good (albeit sometimes slow) forward progress.<p>Of course, you get those bugs that occur with seemingly zero difference in your methods, and that's when you need to start thinking creatively...