Distributed Workflow Orchestration Platform  ·  View 31 of 31  ·  Assurance

Failure Modes and Accepted Residual Risk

Twenty-one ways this platform fails, what it does about each, and the five it chose not to solve.

Editable source SVG draw.io All views
Execution plane — expected to fail constantly
Execution plane — expected to fail constantly
Failure → mitigation
Failure → mitigation
Worker crash mid-task
lock expires · redelivered
Worker crash mid-task...
Spot node reclaimed
30 s notice · PDB · drain
Spot node reclaimed...
Handler hangs
watchdog cancels at deadline
Handler hangs...
Poison message
envelope check · DLQ, no retry
Poison message...
Duplicate delivery
idempotency key · view 17
Duplicate delivery...
Control plane — must fail safe
Control plane — must fail safe
Failure → mitigation
Failure → mitigation
Orchestrator dies mid-transition
ETag write atomic · replay safe
Orchestrator dies mid-transition...
Outbox relay lag
checkpointed feed · resumes
Outbox relay lag...
Double dispatch
MessageId dedupe · 10 min
Double dispatch...
Scheduler split brain
fencing token · view 30
Scheduler split brain...
Bad definition deployed
immutable versions · pinned
Bad definition deployed...
Dependency failures — the behaviour must be stated, not discovered
Dependency failures — the behaviour must be stated, not discovered
Failure → declared behaviour
Failure → declared behaviour
Cosmos 429 throttling
SDK retry · autoscale · shed writes
Cosmos 429 throttling...
Cosmos region down
reads fail over · writes 503
Cosmos region down...
Service Bus down
submissions accepted · outbox drains
Service Bus down...
Redis down
leases fail open at reduced limit
Redis down...
Downstream saturated
circuit opens · tasks held
Downstream saturated...
Network partition
no dispatch · no state loss
Network partition...
Accepted residual risk for V1 — signed off, not overlooked
Accepted residual risk for V1 — signed off, not overlooked
Known and priced
Known and priced
Single write region
RTO 4 h · RPO 5 min
Single write region...
In-flight messages not replicated
rebuilt from Cosmos on failover
In-flight messages not replicated...
Exactly-once not offered
at-least-once + idempotency
Exactly-once not offered...
500-task hot partition
10K RU / 20 GB partition cap
500-task hot partition...
Shared control plane
no per-tenant blast radius
Shared control plane...
Chaos experiments
each row has a test in staging
Chaos experiments...
Runbooks
one per failure mode
Runbooks...
pod kill
pod kill
namespace block
namespace block
NSG partition
NSG partition
failover drill
failover drill
Failure Modes, Mitigations and Accepted Residual Risk
Failure Modes, Mitigations and Accepted Residual Risk
Risk / gap
Risk / gap
Application we own
Application we own
failure / alternate
failure / alternate
synchronous
synchronous
Twenty-one failure modes, each with a stated behaviour and a chaos experiment that proves it in staging. The last box is the part a reviewer should argue with: it is what this design chose not to solve in V1.
Twenty-one failure modes, each with a stated behaviour and a chaos experiment that proves it in staging. The last box is the part a reviewer should argue with: it is what this design chose not to solve in V1.
v 1.0 · owner Data & AI Global Practice · date 2026-08
v 1.0 · owner Data & AI Global Practice · date 2026-08
Text is not SVG - cannot display

How to read this page

  • Every red box is a failure with its declared behaviour underneath. Declared is the operative word: 'what happens when Service Bus is unavailable' is an architectural answer, not something to discover during an incident.
  • The execution plane is expected to fail constantly and is designed for it. The control plane must fail safe. Dependencies must have stated behaviour. The last box is what was consciously not solved.
  • Each row has a chaos experiment in staging that reproduces it and a runbook that resolves it. A failure mode without a test is a hypothesis.

Declared dependency behaviour

  • Cosmos throttled: SDK retry with backoff, autoscale absorbs, and submissions shed with 503 before orchestration is starved. Reads degrade before writes.
  • Service Bus unavailable: submissions are still accepted and committed, outbox rows accumulate, dispatch resumes on recovery with a visible lag metric. Nothing is lost, everything is late.
  • Redis unavailable: concurrency leases fail open at a globally reduced cap and circuits fail permissive. Liveness is preserved, exact fairness is not — a deliberate trade.

Accepted residual risk

  • Single write region: RTO 4 hours, RPO 5 minutes. Multi-region write was rejected because conflict resolution on a state machine is a correctness problem, not a merge problem.
  • In-flight messages are not replicated and are rebuilt from Cosmos on failover. Exactly-once is not offered at all; at-least-once plus idempotency is the contract.
  • A 500-task execution concentrates on one logical partition, and the control plane is shared across all tenants. These are the two items a reviewer should push hardest on, and they are the first two things V2 should address.