# Error Handling / Resilience

> Every principle in this category is listed as a record.

Page: Ontology · Principles
Canonical: https://banes-lab.com/ontology#arch-category-error-handling-resilience

Every principle in this category is listed as a record. Each record carries its kind, its severity, the scopes it applies at and the layer it lives in, then the edge relations that join it to other records, the records that point back at it, the contracts that answer to it and the tensions it takes part in. The descriptors say how it is violated, detected, measured, repaired and enforced. Where the record carries one, an exemplar shows the shape before and after the principle is applied.

Relations diagram

The relations inside this category.

```mermaid
flowchart LR
n_defensive_programming["Defensive Programming"]
n_fail_fast["Fail Fast"]
n_fail_safe["Fail Safe"]
n_fail_secure["Fail Secure"]
n_graceful_degradation["Graceful Degradation"]
n_fault_tolerance["Fault Tolerance"]
n_resilience["Resilience"]
n_robustness_principle["Robustness Principle"]
n_error_handling["Error Handling"]
n_error_boundaries["Error Boundaries"]
n_fallback_pattern["Fallback Pattern"]
n_retry_pattern["Retry Pattern"]
n_timeout_pattern["Timeout Pattern"]
n_circuit_breaker_pattern["Circuit Breaker Pattern"]
n_bulkhead_pattern["Bulkhead Pattern"]
n_backpressure["Backpressure"]
n_defensive_programming --> n_error_handling
n_defensive_programming --> n_fail_fast
n_fail_fast -.-> n_graceful_degradation
n_fail_safe --> n_resilience
n_graceful_degradation --> n_fault_tolerance
n_fault_tolerance --> n_error_handling
n_fault_tolerance --> n_resilience
n_resilience --> n_fault_tolerance
n_error_handling --> n_resilience
n_error_boundaries --> n_resilience
n_fallback_pattern --> n_graceful_degradation
n_retry_pattern --> n_fault_tolerance
n_circuit_breaker_pattern --> n_fault_tolerance
n_circuit_breaker_pattern --> n_backpressure
n_backpressure --> n_resilience
```

### Defensive Programming

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: mandatory
- Scope: function, module, boundary
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Input Validation](https://banes-lab.com/records/arch/input-validation.md), [Error Handling](https://banes-lab.com/records/arch/error-handling.md)

Reinforces
[Robustness](https://banes-lab.com/records/lex/robustness.md), [Fail Fast](https://banes-lab.com/records/arch/fail-fast.md)

Enables
[Safe Failure](https://banes-lab.com/records/lex/safe-failure.md)

In tension with
[Verbosity](https://banes-lab.com/records/lex/verbosity.md)

Conflicts with
[Trusting Invalid Inputs](https://banes-lab.com/records/lex/trusting-invalid-inputs.md)

Tensions
[Defensive Programming Verbosity](https://banes-lab.com/records/tension/defensive-programming-verbosity.md)

Violated by
unchecked assumptions

Detected by
null/empty/range unsafe access

Measured by
guard coverage, runtime exception rate

Refactored by
Add Guards, Validate Inputs

Enforced by
linting, [tests](https://banes-lab.com/records/lex/tests.md)

Before

```typescript
function renameFoo(foo: Foo, name: string) {
foo.name = name.trim();
}
```

After

```typescript
function renameFoo(foo: Foo | undefined, name: unknown) {
if (!foo) throw new Error("Foo required");
if (typeof name !== "string" || name.trim().length === 0) throw new Error("valid name required");
return { ...foo, name: name.trim() };
}
```

### Fail Fast

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: recommended
- Scope: input, startup, invariant boundary
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Preconditions](https://banes-lab.com/records/arch/preconditions.md), [Validation](https://banes-lab.com/records/arch/validation.md)

Reinforces
[Correctness](https://banes-lab.com/records/arch/correctness.md), [Observability](https://banes-lab.com/records/arch/observability.md)

Enables
[Early Defect Detection](https://banes-lab.com/records/lex/early-defect-detection.md)

In tension with
[Graceful Degradation](https://banes-lab.com/records/arch/graceful-degradation.md)

Conflicts with
[Silent Failure](https://banes-lab.com/records/lex/silent-failure.md), [Silent Data Corruption](https://banes-lab.com/records/arch/silent-data-corruption.md)

Referenced by
[Preconditions](https://banes-lab.com/records/arch/preconditions.md), [Defensive Programming](https://banes-lab.com/records/arch/defensive-programming.md), [Schema Validation](https://banes-lab.com/records/arch/schema-validation.md), [Input Validation](https://banes-lab.com/records/arch/input-validation.md)

Tensions
[Fail Fast Graceful Degradation](https://banes-lab.com/records/tension/fail-fast-graceful-degradation.md)

Violated by
swallowing invalid state

Detected by
ignored exceptions, default fallbacks masking errors

Measured by
late failure rate

Refactored by
Add Guard Clause, Throw Explicit Error

Enforced by
validation tests

Before

```typescript
const fooUrl = process.env.FOO_URL ?? "http://localhost:3000";
startFooApp(fooUrl);
```

After

```typescript
const fooUrl = process.env.FOO_URL;
if (!fooUrl) throw new Error("FOO_URL is required");
startFooApp(new URL(fooUrl));
```

### Fail Safe

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: mandatory
- Scope: runtime, operation, security
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Safe Defaults](https://banes-lab.com/records/lex/safe-defaults.md)

Reinforces
[Resilience](https://banes-lab.com/records/arch/resilience.md)

Enables
[Damage Limitation](https://banes-lab.com/records/lex/damage-limitation.md)

In tension with
[Availability](https://banes-lab.com/records/lex/availability.md)

Conflicts with
[Unsafe Default Continuation](https://banes-lab.com/records/lex/unsafe-default-continuation.md)

Tensions
[Fail Safe Availability](https://banes-lab.com/records/tension/availability-fail-safe.md)

Violated by
continuing in unsafe state

Detected by
fallback to unsafe behavior

Measured by
unsafe failure modes

Refactored by
Add Safe Fallback, Stop Unsafe Operation

Enforced by
failure-mode tests

Before

```typescript
try {
await openFooGate();
} catch {
fooGate.unlock();
}
```

After

```typescript
try {
await openFooGate();
} catch {
fooGate.lock();
throw new Error("Foo gate remains locked");
}
```

### Fail Secure

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: mandatory
- Scope: auth, access, infrastructure
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Secure Defaults](https://banes-lab.com/records/lex/secure-defaults.md)

Reinforces
[Security by Design](https://banes-lab.com/records/arch/security-by-design.md)

Enables
[Deny-by-Default Behavior](https://banes-lab.com/records/lex/deny-by-default-behavior.md)

In tension with
[Availability](https://banes-lab.com/records/lex/availability.md)

Conflicts with
[Fail Open](https://banes-lab.com/records/lex/fail-open.md)

Referenced by
[Secure by Default](https://banes-lab.com/records/arch/secure-by-default.md)

Tensions
[Fail Secure Availability](https://banes-lab.com/records/tension/availability-fail-secure.md)

Violated by
allowing access after auth/policy failure

Detected by
fail-open branches

Measured by
fail-open count

Refactored by
Default Deny, Add Explicit Allow

Enforced by
security tests, policy checks

Before

```typescript
function authorizeFoo(token?: string) {
if (!token) return { role: "admin" };
return decodeToken(token);
}
```

After

```typescript
function authorizeFoo(token?: string): FooIdentity {
if (!token) throw new UnauthorizedError();
const identity = verifyToken(token);
if (!identity) throw new UnauthorizedError();
return identity;
}
```

### Graceful Degradation

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: recommended
- Scope: service, UX, system
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Fallback](https://banes-lab.com/records/lex/fallback.md), [Feature Isolation](https://banes-lab.com/records/lex/feature-isolation.md)

Reinforces
[Fault Tolerance](https://banes-lab.com/records/arch/fault-tolerance.md)

Enables
[Partial Availability](https://banes-lab.com/records/lex/partial-availability.md)

In tension with
[Consistency / Feature Completeness](https://banes-lab.com/records/lex/consistency-feature-completeness.md)

Conflicts with
[All-Or-Nothing Failure](https://banes-lab.com/records/lex/all-or-nothing-failure.md)

Referenced by
[Fail Fast](https://banes-lab.com/records/arch/fail-fast.md), [Fallback Pattern](https://banes-lab.com/records/arch/fallback-pattern.md)

Tensions
[Graceful Degradation Consistency / Feature Completeness](https://banes-lab.com/records/tension/consistency-feature-completeness-graceful-degradation.md)

Violated by
total outage from noncritical dependency failure

Detected by
critical path dependency on optional service

Measured by
partial availability under failure

Refactored by
Add Fallback, Isolate Optional Dependency

Enforced by
chaos tests

Before

```typescript
async function renderFooPage() {
const foo = await fooService.get();
const bar = await barRecommendations.get();
return render(foo, bar);
}
```

After

```typescript
async function renderFooPage() {
const foo = await fooService.get();
const bar = await barRecommendations.get().catch(() => [] as Bar[]);
return render(foo, bar);
}
```

### Fault Tolerance

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Severity: contextual
- Scope: service, system, infrastructure
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Redundancy](https://banes-lab.com/records/arch/redundancy.md), [Error Handling](https://banes-lab.com/records/arch/error-handling.md)

Reinforces
[Resilience](https://banes-lab.com/records/arch/resilience.md)

Enables
[Continued Operation Under Failure](https://banes-lab.com/records/lex/continued-operation-under-failure.md)

In tension with
[Cost](https://banes-lab.com/records/lex/cost.md)

Conflicts with
[Single Point of Failure](https://banes-lab.com/records/lex/single-point-of-failure.md)

Referenced by
[Leader Election](https://banes-lab.com/records/arch/leader-election.md), [Consensus](https://banes-lab.com/records/arch/consensus.md), [Graceful Degradation](https://banes-lab.com/records/arch/graceful-degradation.md), [Resilience](https://banes-lab.com/records/arch/resilience.md), [Retry Pattern](https://banes-lab.com/records/arch/retry-pattern.md), [Circuit Breaker Pattern](https://banes-lab.com/records/arch/circuit-breaker-pattern.md), [Redundancy](https://banes-lab.com/records/arch/redundancy.md), [Chaos Engineering](https://banes-lab.com/records/arch/chaos-engineering.md), [RAID Redundancy](https://banes-lab.com/records/arch/raid-redundancy.md)

Tensions
[Fault Tolerance Cost](https://banes-lab.com/records/tension/cost-fault-tolerance.md)

Violated by
unrecoverable dependency failure

Detected by
no retry/failover/fallback for critical path

Measured by
failure recovery rate, [availability](https://banes-lab.com/records/lex/availability.md)

Refactored by
Add Retry, [Failover](https://banes-lab.com/records/arch/failover.md), [Redundancy](https://banes-lab.com/records/arch/redundancy.md)

Enforced by
resilience tests

Before

```typescript
const foo = await fooReplicaA.read(id);
```

After

```typescript
const foo = await firstSuccessful([
() => fooReplicaA.read(id),
() => fooReplicaB.read(id),
() => fooReplicaC.read(id),
]);
```

### Resilience

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Severity: mandatory for production systems
- Scope: service, system, infrastructure
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Fault Tolerance](https://banes-lab.com/records/arch/fault-tolerance.md), [Observability](https://banes-lab.com/records/arch/observability.md)

Reinforces
[Self-Healing](https://banes-lab.com/records/lex/self-healing.md), [Recovery](https://banes-lab.com/records/lex/recovery.md)

Enables
[Stability Under Stress](https://banes-lab.com/records/lex/stability-under-stress.md)

In tension with
[Complexity](https://banes-lab.com/records/lex/complexity.md)

Conflicts with
[Brittle Architecture](https://banes-lab.com/records/lex/brittle-architecture.md)

Referenced by
[Decentralization](https://banes-lab.com/records/arch/decentralization.md), [Autonomy](https://banes-lab.com/records/arch/autonomy.md), [Fail Safe](https://banes-lab.com/records/arch/fail-safe.md), [Fault Tolerance](https://banes-lab.com/records/arch/fault-tolerance.md), [Error Handling](https://banes-lab.com/records/arch/error-handling.md), [Error Boundaries](https://banes-lab.com/records/arch/error-boundaries.md), [Backpressure](https://banes-lab.com/records/arch/backpressure.md), [Message Queue](https://banes-lab.com/records/arch/message-queue.md), [Asynchronous Communication](https://banes-lab.com/records/arch/asynchronous-communication.md), [Compensating Transaction](https://banes-lab.com/records/arch/compensating-transaction.md), [Observability](https://banes-lab.com/records/arch/observability.md), [Service Discovery](https://banes-lab.com/records/arch/service-discovery.md), [Statelessness](https://banes-lab.com/records/arch/statelessness.md), [Self-Healing Architecture](https://banes-lab.com/records/arch/self-healing-architecture.md), [Rollback](https://banes-lab.com/records/arch/rollback.md)

Tensions
[Resilience Complexity](https://banes-lab.com/records/tension/complexity-resilience.md)

Violated by
cascading failures

Detected by
[failure propagation](https://banes-lab.com/records/lex/failure-propagation.md), lack of isolation

Measured by
MTTR, error budget, [availability](https://banes-lab.com/records/lex/availability.md)

Refactored by
Add Circuit Breaker, Bulkhead, [Retry](https://banes-lab.com/records/lex/retry.md), [Timeout](https://banes-lab.com/records/lex/timeout.md)

Enforced by
[chaos testing](https://banes-lab.com/records/reason/technique-chaos-testing.md), SLO gates

Before

```typescript
async function loadFoo(id: FooId) { return remoteFoo.get(id); }
```

After

```typescript
async function loadFoo(id: FooId) {
return circuitBreaker.execute(() => retry.withBackoff(() => remoteFoo.get(id), { attempts: 3 }));
}
```

### Robustness Principle

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: contextual
- Scope: protocol, API, input processing
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Strict Output](https://banes-lab.com/records/lex/strict-output.md), [Tolerant Input](https://banes-lab.com/records/lex/tolerant-input.md)

Reinforces
[Compatibility](https://banes-lab.com/records/lex/compatibility.md)

Enables
[Interoperability](https://banes-lab.com/records/arch/interoperability.md)

In tension with
[Strict Validation](https://banes-lab.com/records/lex/strict-validation.md)

Conflicts with
[Fragile Parsing](https://banes-lab.com/records/lex/fragile-parsing.md)

Tensions
[Robustness Principle Strict Validation](https://banes-lab.com/records/tension/robustness-principle-strict-validation.md)

Violated by
rejecting harmless compatible input variations

Detected by
parser brittleness

Measured by
compatibility failure rate

Refactored by
Normalize Input, Validate Semantics

Enforced by
compatibility test suite

Before

```typescript
function readFoo(message: any) { return { id: message.id, name: message.name }; }
function writeFoo(foo: Foo) { return { ...foo, debug: globalThis }; }
```

After

```typescript
function readFoo(message: unknown) {
const value = FooEnvelopeSchema.parse(message);
return { id: value.id, name: value.name };
}
function writeFoo(foo: Foo): FooEnvelopeV1 { return { version: 1, id: foo.id, name: foo.name }; }
```

### Error Handling

- Kind: [principle](https://banes-lab.com/records/kind/principle.md)
- Severity: mandatory
- Scope: function, module, service
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Error Model](https://banes-lab.com/records/lex/error-model.md), [Observability](https://banes-lab.com/records/arch/observability.md)

Reinforces
[Resilience](https://banes-lab.com/records/arch/resilience.md), [Correctness](https://banes-lab.com/records/arch/correctness.md)

Enables
[Controlled Failure](https://banes-lab.com/records/lex/controlled-failure.md)

In tension with
[Simplicity](https://banes-lab.com/records/lex/simplicity.md)

Conflicts with
[Exception Swallowing](https://banes-lab.com/records/lex/exception-swallowing.md), [Exception Control Flow](https://banes-lab.com/records/arch/exception-control-flow.md)

Referenced by
[Defensive Programming](https://banes-lab.com/records/arch/defensive-programming.md), [Fault Tolerance](https://banes-lab.com/records/arch/fault-tolerance.md)

Tensions
[Error Handling Simplicity](https://banes-lab.com/records/tension/error-handling-simplicity.md)

Violated by
ignored errors, generic catches, lost context

Detected by
empty catch blocks, unchecked result errors

Measured by
unhandled error count

Refactored by
Add Error Type, Propagate Context, Handle Explicitly

Enforced by
linting, [tests](https://banes-lab.com/records/lex/tests.md)

Before

```typescript
async function loadFoo(id: FooId) {
try { return await fooStore.find(id); } catch { return null; }
}
```

After

```typescript
type LoadFooResult =
| { ok: true; value: Foo }
| { ok: false; error: "NOT_FOUND" | "STORE_UNAVAILABLE" };
async function loadFoo(id: FooId): Promise<LoadFooResult> {
return fooStore.findResult(id);
}
```

### Error Boundaries

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: recommended
- Scope: component, UI, service boundary
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Failure Isolation](https://banes-lab.com/records/lex/failure-isolation.md)

Reinforces
[Resilience](https://banes-lab.com/records/arch/resilience.md)

Enables
[Localized Recovery](https://banes-lab.com/records/lex/localized-recovery.md)

In tension with
[Hidden Errors](https://banes-lab.com/records/lex/hidden-errors.md)

Conflicts with
[Failure Propagation](https://banes-lab.com/records/lex/failure-propagation.md)

Tensions
[Error Boundaries Hidden Errors](https://banes-lab.com/records/tension/error-boundaries-hidden-errors.md)

Violated by
uncontained failures crashing whole system

Detected by
uncaught exceptions crossing boundary

Measured by
blast radius

Refactored by
Add Boundary Handler, Isolate Component

Enforced by
failure tests

Before

```typescript
function renderApp() { return renderFooPanel(loadFoo()); }
```

After

```typescript
function FooBoundary({ render }: { render(): View }) {
try { return render(); }
catch (error) { return renderFooError(toFooError(error)); }
}
const app = FooBoundary({ render: () => renderFooPanel(loadFoo()) });
```

### Fallback Pattern

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: contextual
- Scope: service, dependency call
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Alternate Behavior](https://banes-lab.com/records/lex/alternate-behavior.md)

Reinforces
[Graceful Degradation](https://banes-lab.com/records/arch/graceful-degradation.md)

Enables
[Partial Availability](https://banes-lab.com/records/lex/partial-availability.md)

In tension with
[Stale/Reduced Results](https://banes-lab.com/records/lex/stale-reduced-results.md)

Conflicts with
[Single Behavior Path](https://banes-lab.com/records/lex/single-behavior-path.md)

Tensions
[Fallback Pattern Stale/Reduced Results](https://banes-lab.com/records/tension/fallback-pattern-stale-reduced-results.md)

Violated by
no alternate path for noncritical dependency

Detected by
hard dependency in optional path

Measured by
fallback coverage

Refactored by
Add Fallback Response/Provider

Enforced by
failure injection tests

Before

```typescript
const foo = await primaryFooStore.find(id);
```

After

```typescript
const foo = await primaryFooStore.find(id).catch(() => replicaFooStore.find(id));
if (!foo) throw new FooUnavailableError(id);
```

### Retry Pattern

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: contextual
- Scope: network, IO, message handling
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Idempotency](https://banes-lab.com/records/arch/idempotency.md), [Timeout](https://banes-lab.com/records/lex/timeout.md), [Backoff](https://banes-lab.com/records/lex/backoff.md)

Reinforces
[Fault Tolerance](https://banes-lab.com/records/arch/fault-tolerance.md)

Enables
[Transient Failure Recovery](https://banes-lab.com/records/lex/transient-failure-recovery.md)

In tension with
[Load Amplification](https://banes-lab.com/records/lex/load-amplification.md)

Conflicts with
[Non-Idempotent Operation](https://banes-lab.com/records/lex/non-idempotent-operation.md)

Tensions
[Retry Pattern Load Amplification](https://banes-lab.com/records/tension/load-amplification-retry-pattern.md)

Violated by
blind retry without backoff/idempotency

Detected by
retry loops without timeout/backoff

Measured by
retry success rate, retry storm rate

Refactored by
Add Exponential Backoff, Idempotency Key

Enforced by
resilience libraries, policy checks

Before

```typescript
await remoteFoo.save(foo);
```

After

```typescript
await retry.withBackoff(
() => remoteFoo.save(foo),
{ attempts: 3, retryIf: isTransientError, jitter: true },
);
```

### Timeout Pattern

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: mandatory
- Scope: network, IO, dependency call
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Time Budget](https://banes-lab.com/records/lex/time-budget.md)

Reinforces
[Fault Isolation](https://banes-lab.com/records/lex/fault-isolation.md)

Enables
[Bounded Waiting](https://banes-lab.com/records/lex/bounded-waiting.md)

In tension with
[Slow Operation Tolerance](https://banes-lab.com/records/lex/slow-operation-tolerance.md)

Conflicts with
[Infinite Wait](https://banes-lab.com/records/lex/infinite-wait.md), [Timeout Omission](https://banes-lab.com/records/arch/timeout-omission.md)

Tensions
[Timeout Pattern Slow Operation Tolerance](https://banes-lab.com/records/tension/slow-operation-tolerance-timeout-pattern.md)

Violated by
external calls without timeout

Detected by
missing timeout config

Measured by
timeout coverage, latency tail

Refactored by
Add Timeout, Propagate Deadline

Enforced by
lint/config checks

Before

```typescript
const foo = await remoteFoo.find(id);
```

After

```typescript
const foo = await withTimeout(remoteFoo.find(id), 500, () => new FooTimeoutError(id));
```

### Circuit Breaker Pattern

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: contextual
- Scope: dependency call, service
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Failure Threshold](https://banes-lab.com/records/lex/failure-threshold.md), [Fallback](https://banes-lab.com/records/lex/fallback.md)

Reinforces
[Fault Tolerance](https://banes-lab.com/records/arch/fault-tolerance.md), [Backpressure](https://banes-lab.com/records/arch/backpressure.md)

Enables
[Cascading Failure Prevention](https://banes-lab.com/records/lex/cascading-failure-prevention.md)

In tension with
[Availability of Degraded Dependency](https://banes-lab.com/records/lex/availability-of-degraded-dependency.md)

Conflicts with
[Unbounded Retry](https://banes-lab.com/records/lex/unbounded-retry.md), [Retry Storm](https://banes-lab.com/records/arch/retry-storm.md)

Tensions
[Circuit Breaker Pattern Availability of Degraded Dependency](https://banes-lab.com/records/tension/availability-of-degraded-dependency-circuit-breaker-pattern.md)

Violated by
continuing calls to failing dependency

Detected by
high failure dependency calls without breaker

Measured by
breaker trip rate, downstream error rate

Refactored by
Add Circuit Breaker

Enforced by
[resilience policy](https://banes-lab.com/records/algo/resilience-policy.md)

Before

```typescript
async function loadFoo(id: FooId) { return remoteFoo.find(id); }
```

After

```typescript
const fooBreaker = new CircuitBreaker({ failureThreshold: 5, resetAfterMs: 30_000 });
async function loadFoo(id: FooId) {
return fooBreaker.execute(() => remoteFoo.find(id));
}
```

### Bulkhead Pattern

- Kind: [pattern](https://banes-lab.com/records/kind/pattern.md)
- Severity: contextual
- Scope: resource pool, service, runtime
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Resource Isolation](https://banes-lab.com/records/lex/resource-isolation.md)

Reinforces
[Fault Isolation](https://banes-lab.com/records/lex/fault-isolation.md)

Enables
[Blast-Radius Reduction](https://banes-lab.com/records/lex/blast-radius-reduction.md)

In tension with
[Resource Utilization](https://banes-lab.com/records/arch/resource-utilization.md)

Conflicts with
[Shared Resource Pool](https://banes-lab.com/records/lex/shared-resource-pool.md)

Tensions
[Bulkhead Pattern Resource Utilization](https://banes-lab.com/records/tension/bulkhead-pattern-resource-utilization.md)

Violated by
one dependency consuming all threads/connections

Detected by
shared pools across critical/noncritical workloads

Measured by
resource saturation isolation

Refactored by
Split Resource Pools, Add Isolation

Enforced by
resource policy

Before

```typescript
const pool = new WorkerPool(100);
pool.submit(fooTask);
pool.submit(barTask);
```

After

```typescript
const fooPool = new WorkerPool(20);
const barPool = new WorkerPool(20);
fooPool.submit(fooTask);
barPool.submit(barTask);
```

### Backpressure

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Severity: mandatory for high-load systems
- Scope: stream, queue, service
- Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)

Details

Requires
[Capacity Signaling](https://banes-lab.com/records/lex/capacity-signaling.md)

Reinforces
[Resilience](https://banes-lab.com/records/arch/resilience.md), [Stability](https://banes-lab.com/records/lex/stability.md)

Enables
[Overload Protection](https://banes-lab.com/records/lex/overload-protection.md)

In tension with
[Throughput](https://banes-lab.com/records/arch/throughput.md)

Conflicts with
[Unbounded Ingestion](https://banes-lab.com/records/lex/unbounded-ingestion.md), [Missing Backpressure](https://banes-lab.com/records/arch/missing-backpressure.md)

Referenced by
[Circuit Breaker Pattern](https://banes-lab.com/records/arch/circuit-breaker-pattern.md), [Message Queue](https://banes-lab.com/records/arch/message-queue.md), [Rate Limiting](https://banes-lab.com/records/arch/rate-limiting.md), [Streaming Architecture](https://banes-lab.com/records/arch/streaming-architecture.md)

Tensions
[Backpressure Throughput](https://banes-lab.com/records/tension/backpressure-throughput.md)

Violated by
unbounded queues, uncontrolled producers

Detected by
queue growth without throttling

Measured by
queue depth, rejection/throttle rate

Refactored by
Add Rate Limit, Bounded Queue, Demand Signal

Enforced by
load tests, runtime policies

Before

```typescript
stream.on("data", foo => processFoo(foo));
```

After

```typescript
for await (const foo of stream) {
await capacity.acquire();
void processFoo(foo).finally(() => capacity.release());
}
```

## Links to

- [principle](https://banes-lab.com/records/kind/principle.md)
- [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)
- [Input Validation](https://banes-lab.com/records/arch/input-validation.md)
- [Error Handling](https://banes-lab.com/records/arch/error-handling.md)
- [Robustness](https://banes-lab.com/records/lex/robustness.md)
- [Fail Fast](https://banes-lab.com/records/arch/fail-fast.md)
- [Safe Failure](https://banes-lab.com/records/lex/safe-failure.md)
- [Verbosity](https://banes-lab.com/records/lex/verbosity.md)
- [Trusting Invalid Inputs](https://banes-lab.com/records/lex/trusting-invalid-inputs.md)
- [Defensive Programming / Verbosity](https://banes-lab.com/records/tension/defensive-programming-verbosity.md)
- [Tests](https://banes-lab.com/records/lex/tests.md)
- [Preconditions](https://banes-lab.com/records/arch/preconditions.md)
- [Validation](https://banes-lab.com/records/arch/validation.md)
- [Correctness](https://banes-lab.com/records/arch/correctness.md)
- [Observability](https://banes-lab.com/records/arch/observability.md)
- [Early Defect Detection](https://banes-lab.com/records/lex/early-defect-detection.md)
- [Graceful Degradation](https://banes-lab.com/records/arch/graceful-degradation.md)
- [Silent Failure](https://banes-lab.com/records/lex/silent-failure.md)
- [Silent Data Corruption](https://banes-lab.com/records/arch/silent-data-corruption.md)
- [Defensive Programming](https://banes-lab.com/records/arch/defensive-programming.md)
- [Schema Validation](https://banes-lab.com/records/arch/schema-validation.md)
- [Fail Fast / Graceful Degradation](https://banes-lab.com/records/tension/fail-fast-graceful-degradation.md)
- [Safe Defaults](https://banes-lab.com/records/lex/safe-defaults.md)
- [Resilience](https://banes-lab.com/records/arch/resilience.md)
- [Damage Limitation](https://banes-lab.com/records/lex/damage-limitation.md)
- [Availability](https://banes-lab.com/records/lex/availability.md)
- [Unsafe Default Continuation](https://banes-lab.com/records/lex/unsafe-default-continuation.md)
- [Fail Safe / Availability](https://banes-lab.com/records/tension/availability-fail-safe.md)
- [Secure Defaults](https://banes-lab.com/records/lex/secure-defaults.md)
- [Security by Design](https://banes-lab.com/records/arch/security-by-design.md)
- [Deny-by-Default Behavior](https://banes-lab.com/records/lex/deny-by-default-behavior.md)
- [Fail Open](https://banes-lab.com/records/lex/fail-open.md)
- [Secure by Default](https://banes-lab.com/records/arch/secure-by-default.md)
- [Fail Secure / Availability](https://banes-lab.com/records/tension/availability-fail-secure.md)
- [Fallback](https://banes-lab.com/records/lex/fallback.md)
- [Feature Isolation](https://banes-lab.com/records/lex/feature-isolation.md)
- [Fault Tolerance](https://banes-lab.com/records/arch/fault-tolerance.md)
- [Partial Availability](https://banes-lab.com/records/lex/partial-availability.md)
- [Consistency / Feature Completeness](https://banes-lab.com/records/lex/consistency-feature-completeness.md)
- [All-Or-Nothing Failure](https://banes-lab.com/records/lex/all-or-nothing-failure.md)
- [Fallback Pattern](https://banes-lab.com/records/arch/fallback-pattern.md)
- [Graceful Degradation / Consistency / Feature Completeness](https://banes-lab.com/records/tension/consistency-feature-completeness-graceful-degradation.md)
- [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- [Redundancy](https://banes-lab.com/records/arch/redundancy.md)
- [Continued Operation Under Failure](https://banes-lab.com/records/lex/continued-operation-under-failure.md)
- [Cost](https://banes-lab.com/records/lex/cost.md)
- [Single Point of Failure](https://banes-lab.com/records/lex/single-point-of-failure.md)
- [Leader Election](https://banes-lab.com/records/arch/leader-election.md)
- [Consensus](https://banes-lab.com/records/arch/consensus.md)
- [Retry Pattern](https://banes-lab.com/records/arch/retry-pattern.md)
- [Circuit Breaker Pattern](https://banes-lab.com/records/arch/circuit-breaker-pattern.md)
- [Chaos Engineering](https://banes-lab.com/records/arch/chaos-engineering.md)
- [RAID Redundancy](https://banes-lab.com/records/arch/raid-redundancy.md)
- [Fault Tolerance / Cost](https://banes-lab.com/records/tension/cost-fault-tolerance.md)
- [Failover](https://banes-lab.com/records/arch/failover.md)
- [Self-Healing](https://banes-lab.com/records/lex/self-healing.md)
- [Recovery](https://banes-lab.com/records/lex/recovery.md)
- [Stability Under Stress](https://banes-lab.com/records/lex/stability-under-stress.md)
- [Complexity](https://banes-lab.com/records/lex/complexity.md)
- [Brittle Architecture](https://banes-lab.com/records/lex/brittle-architecture.md)
- [Decentralization](https://banes-lab.com/records/arch/decentralization.md)
- [Autonomy](https://banes-lab.com/records/arch/autonomy.md)
- [Fail Safe](https://banes-lab.com/records/arch/fail-safe.md)
- [Error Boundaries](https://banes-lab.com/records/arch/error-boundaries.md)
- [Backpressure](https://banes-lab.com/records/arch/backpressure.md)
- [Message Queue](https://banes-lab.com/records/arch/message-queue.md)
- [Asynchronous Communication](https://banes-lab.com/records/arch/asynchronous-communication.md)
- [Compensating Transaction](https://banes-lab.com/records/arch/compensating-transaction.md)
- [Service Discovery](https://banes-lab.com/records/arch/service-discovery.md)
- [Statelessness](https://banes-lab.com/records/arch/statelessness.md)
- [Self-Healing Architecture](https://banes-lab.com/records/arch/self-healing-architecture.md)
- [Rollback](https://banes-lab.com/records/arch/rollback.md)
- [Resilience / Complexity](https://banes-lab.com/records/tension/complexity-resilience.md)
- [Failure Propagation](https://banes-lab.com/records/lex/failure-propagation.md)
- [Retry](https://banes-lab.com/records/lex/retry.md)
- [Timeout](https://banes-lab.com/records/lex/timeout.md)
- [Chaos Testing](https://banes-lab.com/records/reason/technique-chaos-testing.md)
- [Strict Output](https://banes-lab.com/records/lex/strict-output.md)
- [Tolerant Input](https://banes-lab.com/records/lex/tolerant-input.md)
- [Compatibility](https://banes-lab.com/records/lex/compatibility.md)
- [Interoperability](https://banes-lab.com/records/arch/interoperability.md)
- [Strict Validation](https://banes-lab.com/records/lex/strict-validation.md)
- [Fragile Parsing](https://banes-lab.com/records/lex/fragile-parsing.md)
- [Robustness Principle / Strict Validation](https://banes-lab.com/records/tension/robustness-principle-strict-validation.md)
- [Error Model](https://banes-lab.com/records/lex/error-model.md)
- [Controlled Failure](https://banes-lab.com/records/lex/controlled-failure.md)
- [Simplicity](https://banes-lab.com/records/lex/simplicity.md)
- [Exception Swallowing](https://banes-lab.com/records/lex/exception-swallowing.md)
- [Exception Control Flow](https://banes-lab.com/records/arch/exception-control-flow.md)
- [Error Handling / Simplicity](https://banes-lab.com/records/tension/error-handling-simplicity.md)
- [pattern](https://banes-lab.com/records/kind/pattern.md)
- [Failure Isolation](https://banes-lab.com/records/lex/failure-isolation.md)
- [Localized Recovery](https://banes-lab.com/records/lex/localized-recovery.md)
- [Hidden Errors](https://banes-lab.com/records/lex/hidden-errors.md)
- [Error Boundaries / Hidden Errors](https://banes-lab.com/records/tension/error-boundaries-hidden-errors.md)
- [Alternate Behavior](https://banes-lab.com/records/lex/alternate-behavior.md)
- [Stale/Reduced Results](https://banes-lab.com/records/lex/stale-reduced-results.md)
- [Single Behavior Path](https://banes-lab.com/records/lex/single-behavior-path.md)
- [Fallback Pattern / Stale/Reduced Results](https://banes-lab.com/records/tension/fallback-pattern-stale-reduced-results.md)
- [Idempotency](https://banes-lab.com/records/arch/idempotency.md)
- [Backoff](https://banes-lab.com/records/lex/backoff.md)
- [Transient Failure Recovery](https://banes-lab.com/records/lex/transient-failure-recovery.md)
- [Load Amplification](https://banes-lab.com/records/lex/load-amplification.md)
- [Non-Idempotent Operation](https://banes-lab.com/records/lex/non-idempotent-operation.md)
- [Retry Pattern / Load Amplification](https://banes-lab.com/records/tension/load-amplification-retry-pattern.md)
- [Time Budget](https://banes-lab.com/records/lex/time-budget.md)
- [Fault Isolation](https://banes-lab.com/records/lex/fault-isolation.md)
- [Bounded Waiting](https://banes-lab.com/records/lex/bounded-waiting.md)
- [Slow Operation Tolerance](https://banes-lab.com/records/lex/slow-operation-tolerance.md)
- [Infinite Wait](https://banes-lab.com/records/lex/infinite-wait.md)
- [Timeout Omission](https://banes-lab.com/records/arch/timeout-omission.md)
- [Timeout Pattern / Slow Operation Tolerance](https://banes-lab.com/records/tension/slow-operation-tolerance-timeout-pattern.md)
- [Failure Threshold](https://banes-lab.com/records/lex/failure-threshold.md)
- [Cascading Failure Prevention](https://banes-lab.com/records/lex/cascading-failure-prevention.md)
- [Availability of Degraded Dependency](https://banes-lab.com/records/lex/availability-of-degraded-dependency.md)
- [Unbounded Retry](https://banes-lab.com/records/lex/unbounded-retry.md)
- [Retry Storm](https://banes-lab.com/records/arch/retry-storm.md)
- [Circuit Breaker Pattern / Availability of Degraded Dependency](https://banes-lab.com/records/tension/availability-of-degraded-dependency-circuit-breaker-pattern.md)
- [Resilience Policy](https://banes-lab.com/records/algo/resilience-policy.md)
- [Resource Isolation](https://banes-lab.com/records/lex/resource-isolation.md)
- [Blast-Radius Reduction](https://banes-lab.com/records/lex/blast-radius-reduction.md)
- [Resource Utilization](https://banes-lab.com/records/arch/resource-utilization.md)
- [Shared Resource Pool](https://banes-lab.com/records/lex/shared-resource-pool.md)
- [Bulkhead Pattern / Resource Utilization](https://banes-lab.com/records/tension/bulkhead-pattern-resource-utilization.md)
- [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- [Capacity Signaling](https://banes-lab.com/records/lex/capacity-signaling.md)
- [Stability](https://banes-lab.com/records/lex/stability.md)
- [Overload Protection](https://banes-lab.com/records/lex/overload-protection.md)
- [Throughput](https://banes-lab.com/records/arch/throughput.md)
- [Unbounded Ingestion](https://banes-lab.com/records/lex/unbounded-ingestion.md)
- [Missing Backpressure](https://banes-lab.com/records/arch/missing-backpressure.md)
- [Rate Limiting](https://banes-lab.com/records/arch/rate-limiting.md)
- [Streaming Architecture](https://banes-lab.com/records/arch/streaming-architecture.md)
- [Backpressure / Throughput](https://banes-lab.com/records/tension/backpressure-throughput.md)

## Linked from

- [The layer topology](https://banes-lab.com/ontology/schema/the-layer-topology.md)
- [The membership](https://banes-lab.com/ontology/schema/the-membership.md)
