Skip to content

Tensions in Practice: Failure diversity in tension with validation simplicity

Redundant service · design and validation

Two copies of one implementation can survive a failure confined to one copy, yet share the same software defect. Different implementations can reduce that particular common cause, but introduce more behavior to validate and maintain. Compare the design and validation work behind uniform copies and diverse paths. Neither the number of copies nor the number of vendors proves that their important failure modes are independent.

Reduce common-mode failure

Avoid a single implementation defect disabling every alternate service path.

Keep validation manageable

Maintain a tractable body of behavior, assumptions and interactions to test and support.

Why these aims pull against each other

Changing implementations can reduce a shared failure mode, but every additional design and its interactions enlarge the validation and maintenance problem.

Compare the arrangements

Copy one implementation

Validate one implementation and deploy copies as alternate service paths.

What it protects
The implementation behavior is uniform, so the team has fewer distinct designs to understand, validate and maintain.
What it costs
A defect in the shared implementation can affect both copies; duplication does not remove that common cause.
When it fits
Reasonable when the required fault coverage concerns failures confined to individual copies and uniformity is valuable. Shared dependencies still need analysis.

Illustration note: The common design and deployment paths are an editorial illustration. Fewer designs does not mean replicas need no separate deployment or failover testing.

Use different implementations

Supply alternate paths from different implementations, validate each and check how their behaviors work together.

What it protects
An implementation-specific defect need not be shared by every path.
What it costs
The team must validate and maintain heterogeneous behavior, including combinations and disagreements that a single-design test does not settle.
When it fits
Useful when the specific common-mode risk justifies the added validation burden and the supposed independence is examined rather than assumed.

Illustration note: The extra joint-check node visualizes the source’s heterogeneous validation burden. It is not a prescribed certification procedure or proof that the paths fail independently.

What this illustration does—and does not—establish

Redundancy: Diverse redundancy versus testability supplies the heterogeneous validation cost, and Redundancy: Correlated failure defeats redundancy supplies the common-mode risk. The graphs make the extra design and interaction work visible without assigning a reliability score.

  • Diversity can reduce particular common causes; shared inputs, requirements, infrastructure or operating procedures can still defeat both paths.
  • These are design and validation paths, not a runtime voting or failover protocol. Such coordination has its own requirements.
  • The source’s broad statement that different implementations cannot be tested together is not adopted here; the supported claim is that validating heterogeneous implementations and their combinations is harder.

Source entries

Redundancy

Prime · Source of the tension

Redundancy: Diverse redundancy versus testability supplies the conflict examined here.

Diverse redundancy versus testability

The engineering cost of diverse redundancy includes the cost of validating and maintaining multiple heterogeneous implementations.

Read the source section

Structural Tensions

Copies that share a failure mode (same software bug, same vendor, same shared dependency, same operator error) fail together, collapsing N-way redundancy to single-point-of-failure behavior.

Read the source section

Core Idea

Multiple configurations exist, each with distinct failure-coverage and cost trade-offs: *active-active* (all copies operate, any one suffices); *active-standby* (primary operates, standby takes over on failure); *diverse-redundancy* (different implementations of the same function, reducing common-mode failures); *voting* (majority among copies determines output).

Read the source section