Skip to main content

Failure

A failure is the visible, observable moment software does the wrong thing — a page that doesn't load, a calculation that returns the wrong number, a crash. It's the end result of the error → fault → failure chain: a human error introduced a fault into the code, and a failure is that fault actually manifesting under real conditions.

Failures are what testers and users actually experience — nobody sees a "fault" directly, they see its consequence. This is why bug reports describe failures ("clicking Submit does nothing") rather than faults ("the onClick handler references an undefined variable") — the tester doesn't know the fault yet, only the observed symptom.

Not every fault produces a failure. Dead code, an untested edge case, or a code path gated behind a feature flag can carry a fault indefinitely without ever failing — until someone finally exercises that path. This is part of why code coverage matters: untested code is code where faults can hide without ever surfacing as a failure during testing, only showing up later in production.