Need optimism: computers are deterministic, the bug is happening for a reason, you are going to find it, you are going to fix it

(Distributed systems are not deterministic, but any one node is. Just more paths to consider. Events might arrive out of order but they won’t arrive upside down.)

Need pessimism: every assumption might be wrong and where the bug is hiding. Every abstraction can leak, every component might be wrong, you might not be running the code you’re looking at. The code path you added logging to might not be running, your fix might not have worked. There might not be only one bug! (“How did this ever work?” Maybe it didn’t. Maybe another bug made it look like it worked.)

Balance: e.g. relax assumptions one at a time, assume (temporarily) every other component works while you investigate one suspect.