If You Didn’t Fix It, It Ain’t Fixed

This rule should be obvious, but sometimes changes or instrumentation conspire to mask a bug giving the illusion that it is fixed. Adding instrumentation can change memory layouts or timing, but it can’t fix a problem.

One should always understand what a fix does and why it fixes the bug. Otherwise, the bug is not fixed.

Here are some tips on creating fixes.

  • Apply your fix to a pristine version of the code (see git Reset). Ensure you remove debugging code (including debug printfs) that might combine to hide the bug.

  • If your failure is reliably reproducible, then your fix should reliably prevent failure.

  • Check that the bug returns when you remove your bug fix.