The Heisenbug: Works on the Second Try
Description
A two-panel meme. The top panel contains text on a white background: 'When you run your code and get 50 errors but for fun you run it again and it compiles successfully'. The bottom panel features the 'Hold Up' meme, which is a faded, monochrome drawing of Vault Boy from the Fallout video game series. Vault Boy is looking forward with a quizzical, concerned smile, holding his hands up as if questioning reality. The text 'hold up' is visible to his left. The humor lies in the deeply unsettling experience of non-deterministic bugs. For a junior developer, this might seem like a win, but for a senior engineer, it's a terrifying sign of a much deeper problem, such as a race condition, a caching issue in the build system, or a memory corruption problem. These 'Heisenbugs' - bugs that seem to disappear or alter their behavior when one tries to study them - are notoriously difficult to debug and signal a lack of stability in the system
Comments
7Comment deleted
A reproducible bug is a conversation. A bug that fixes itself on the second run is a threat
50 errors disappearing on the second build is just the compiler reminding you that your dependency graph now runs on eventual consistency semantics
After 20 years in this industry, I've learned that the only thing more reliable than a flaky build system is its ability to gaslight you into questioning whether you actually changed something between runs. Somewhere, a race condition is laughing at your deterministic worldview
Ah yes, the Schrödinger's compilation error - simultaneously a critical blocker and completely non-existent until you observe it by running the build again. Senior engineers know this phenomenon well: it's usually a race condition in your build system, stale intermediate objects, or that one dependency that didn't get properly invalidated. The real question isn't 'why did it fail?' but rather 'which layer of caching betrayed me this time?' - and whether you should just add 'make clean' to your muscle memory or finally fix that Makefile you inherited from 2003
Intermittent builds: CI/CD's 'works on my machine' without needing a new machine
50 errors, rerun, green - turns out our build is a consensus protocol: it only compiles after the remote cache and codegen reach quorum
When a rerun fixes 50 compile errors, you didn’t fix code - you achieved eventual consistency in your build graph