There's something very satisfying about fixing bugs. It really feels like you're getting something done, accomplishing something.
When I get into these moods, and feel like fixing a bunch of bugs, I get very methodical about it. I start compiling lists of bugs and reading through them. For each bug, I have a fairly rigid discipline:
- Do I understand what the bug writer was describing?
- Can I write a regression test which demonstrates this bug?
- With the test in place, can I see where it's going wrong? Or step through it in the debugger?
- Does my fix make the regression test pass?
- Do the other regression tests reveal any downsides to my fix?
- Is there anybody I should show this fix to?
- Check in the test and fix, mark the bug resolved, and move on.
On the various bodies of software that I work with, there have accumulated a long list of potential bugs to fix. So I can afford to be rather choosy when I get into these moods. If a particular bug report starts to act up; for example, if it's hard to write a regression test, or if the obvious fix doesn't seem to work, or if other tests start to pitch a fit at my change, I just take a pass on this bug, put some notes in the bug report about what I tried and where I got stuck, and move on to the next.
In periods like this, my goal is to make a serious dent on the open bug list. I understand that I'm not necessarily fixing the most important bugs, or even the bugs which are most deserving of my time. I'm just trying to clear away the clutter and keep it from overwhelming me and the people around me.
So many bugs, so little time. It's just the way it is with software.