A decision that has no answer
Why can no failure detector decide whether a component is dead or slow?
Everything so far has assumed a decidable predicate: a yes/no question that can be answered. Failover needs to know that the leader is dead. Quorums (majority votes) need to count live members. Health checks need to eject bad hosts. Cells need to know which cell is broken. Retry budgets need to know that a request failed. Every reliability mechanism is downstream of one binary question, and this article is about the fact that the question has no answer.
The constraint is logical and permanent: in an asynchronous system (one with no bound on message delay) you cannot distinguish a slow process from a dead one. There is no observation that separates them, because the only evidence you have is the absence of a message, and absence is consistent with both. Every failure detector in production is therefore a timeout: a guess with a tunable error rate, not a measurement.
What stops mattering is the fault itself. Nothing has to be down. Components are up, returning correct answers, passing their own checks, and destroying the system. What starts mattering is epistemics: who observes, what they observe, and whether what they observe is the thing that matters.
Fail-stop is not a property systems have; it is a property we pay to approximate, and every layer that improves reliability by masking errors makes the approximation worse.