Quick answer: Bugs reappear after fixing because the fix didn't actually work (wrong cause or partial fix), or the bug was reintroduced by a later change (a regression that undid the fix). Verifying fixes and tracking per version catches both.
Few things are more frustrating than a bug you thought you fixed coming back. It has two distinct causes, and telling them apart matters. Here's what causes bugs to reappear after fixing.
The Two Reasons Bugs Come Back
A bug reappearing after a 'fix' means either the fix never worked or something undid it. The specific causes:
- The fix didn't actually work, it addressed the wrong cause, so the bug was never really fixed
- An incomplete fix, it fixed part of the problem but not all of it, so the bug persists in some cases
- A later change reintroduced it, a regression where a subsequent change undid the fix or re-broke the same thing
- A merge or integration issue, the fix lost or reverted during merging or integration
- A different cause with the same symptom, a new bug producing the same visible problem, looking like the old one returned
- A fix that didn't ship, the fix not actually included in the build players have
The two main categories are 'the fix never worked' (wrong/incomplete cause) and 'the fix was undone' (a regression), which need different responses.
Why Verification Catches the First
If a fix didn't actually work, you'd know immediately if you verified it, by watching whether the issue stopped occurring in the field on the fixed version. Skipping verification lets a non-working fix sit in a false 'fixed' state until the bug 'reappears' (though it never left).
Bugnet shows whether an issue continues after the fixing version, so you can confirm a fix worked rather than assuming. Verifying fixes catches the 'fix never worked' case immediately, before you believe a bug is gone when it isn't.
Why Per-Version Tracking Catches the Second
If a later change reintroduced the bug, per-version tracking catches it: the issue appears again on a newer version, flagging that a recent change re-broke it (a regression). Knowing which version it returned on points at what change brought it back.
Bugnet tracks issues per version, so a bug reappearing on a later build is visible as a regression tied to that release. So bugs reappear because the fix didn't work or a later change reintroduced it, and verifying fixes (field, per version) catches both, the non-working fix immediately, and the regression when it returns.
Bugs reappear because the fix never worked (wrong/incomplete cause) or a later change reintroduced it (a regression). Verify fixes in the field to catch the first, and track per version to catch the second.