DBRaven
Failure IsolationHigh operational impact

Boundaries Define Failure

The blast radius of any failure is bounded only by the architectural boundaries that contain it. A system with no explicit boundaries has infinite blast radius.

Failure propagation in distributed systems follows the path of least resistance through architectural boundaries. Services sharing a connection pool, a database, or a synchronous call chain are failure-coupled whether or not their codebases are decoupled. Every architectural decision that reduces boundary clarity expands the failure surface area.

Why It Matters

Engineers routinely separate codebases without separating failure domains. Two services can be entirely independent repositories sharing a single PostgreSQL primary : they are still failure-coupled through the database. When the primary degrades, both services degrade simultaneously. The codebase boundary is a governance boundary; the database is the failure boundary. Conflating these two produces unexpected production incidents when "independent" services fail together.

Failure Modes

  • ·Shared database degrades, causing all dependent services to stall simultaneously
  • ·Synchronous call chain timeout propagates upstream through every hop
  • ·Connection pool exhaustion in one service starves all callers sharing that pool
  • ·Single infrastructure failure takes down logically independent services
  • ·Cascading retry storms amplify a local failure to a systemic outage

Amplification Risks

  • Retry storms: callers retry on boundary-crossing failures, amplifying load on already-degraded shared components
  • Timeout cascades: synchronous chains stall progressively as timeouts expire from the bottom of the chain upward
  • Pool exhaustion feedback: connection exhaustion causes more timeouts, which cause more retries, which worsen exhaustion

Temporal Behavior

  • Under sustained load, boundary weaknesses accumulate: a slow memory leak becomes an OOM crash that crosses boundaries
  • Recovery time after boundary-crossing failures is longer because multiple systems must independently recover

Boundary Implications

  • Every shared database is a consistency and ownership boundary that requires explicit governance
  • Every synchronous call chain is a failure propagation path that requires circuit breaker containment
  • Every queue or async boundary reduces blast radius at the cost of introducing eventual consistency

Topology

  • ·Risk nodes with high propagation reach indicate weak boundary isolation
  • ·Shared infrastructure nodes (databases, caches) create implicit failure coupling
  • ·Synchronous dependency edges are explicit failure propagation paths
  • ·Topology depth correlates with blast radius under cascading failure

Scaling

  • ·At higher scale, weakly bounded components fail more frequently and more visibly
  • ·Horizontal scaling increases the number of callers affected by each shared component failure
  • ·Scaling a bounded component is straightforward; scaling coupled components requires coordinated effort

Resilience

  • ·Systems with explicit failure isolation recover independently: one service failure does not compound others
  • ·Bulkheads, circuit breakers, and async decoupling are the primary tools for constructing failure boundaries
  • ·Testing recovery paths per-boundary is the only way to understand actual blast radius

Governance Implications

  • ·Shared database ownership is a boundary violation regardless of service independence
  • ·Synchronous call chains longer than 2-3 hops require explicit circuit breaker boundaries
  • ·Risk node propagation paths in topology reveal hidden boundary weaknesses

Evolution Implications

  • ·Migration from coupled to bounded architecture requires decomposing shared infrastructure, not just splitting codebases
  • ·Introducing async boundaries (event streaming, queue-based decoupling) is a form of boundary construction
  • ·Each migration step should explicitly reduce blast radius, not just reorganize code

Mitigation Patterns

  • Introduce circuit breakers at each synchronous boundary with explicit timeout budgets
  • Use bulkheads to isolate connection pools per downstream dependency
  • Decompose shared databases into service-owned data stores before architectural separation
  • Introduce async event streaming at high-blast-radius integration points
  • Define and test failure domain maps: which failures cross which boundaries

Cross-References

synchronous coupling amplifies fragilityretry logic can amplify failuredistributed systems fail graduallyconnection pool exhaustion cascadesynchronous chain failureblast radius reasoningcircuit breaker patterns