At 10:00, 200 payment events per second meet 220 events per second of consumer capacity. At 10:15, upstream retry traffic pushes arrival to 600 while capacity stays 220. By 10:25, payment state is nine minutes stale—but collections APIs still return HTTP 200 and health checks remain green.
μ = 220/sretry burst10:15λ = 600/s
μ = 220/squeue grows10:25STATE 9 MIN STALE
API STILL GREEN
Oldest critical event age matters more than queue depth alone
Ten thousand events can be harmless at high throughput; one hundred can be dangerous when the oldest payment is 30 minutes old.
| Event | Illustrative lag | Potential impact |
|---|---|---|
| CRM_CONTACT_UPDATED | 30 minutes | Possibly tolerable for some paths |
| PAYMENT_SETTLED | 30 minutes | Collections suppression may be unsafe |
| DRAWDOWN | 10 minutes | Exposure and available credit may be stale |
| DPD_CHANGED | 10 minutes | EWS/collections state may lag |
type StateFreshness = {
component: string;
effectiveAsOf: Date;
availableAsOf: Date;
status: "FRESH" | "STALE" | "UNKNOWN";
};Degrade decisions deliberately and by dependency
| Mode | Meaning | Engineering behaviour |
|---|---|---|
| NORMAL | All critical inputs within budget | Execute standard versioned path |
| DEGRADED | Approved fallback exists | Record mode, stale components and fallback version |
| REFER | Automation cannot decide safely | Route to governed alternate process |
| SUSPEND | Action must not execute | Fail closed for that decision path |
A fallback hierarchy might use fresh real-time state, a recent reconciled batch snapshot, an approved conservative rule, then manual review—but only where policy permits. A 06:00 exposure snapshot may support low-risk monitoring yet be unacceptable for a limit increase.
Dependency-aware degradation keeps unaffected decisions alive: fresh payment and DPD may permit collections suppression even if a slower behavioural feature is stale. Do not take the whole platform offline for an unrelated dependency.
Retries must relieve transient failure—not amplify it
| Class | Treatment |
|---|---|
| Transient | Bounded retry with exponential backoff and jitter |
| Permanent invalid | Quarantine with reason and lineage |
| Unknown | Bounded retry, then isolate and investigate |
| Poison event | Prevent repeated consumer crash; quarantine where economically safe |
type QuarantinedEvent = {
eventId: string;
reason: string;
failedAt: Date;
retryCount: number;
};Never discard financial events silently. If Ek+1 depends on quarantined Ek, mark that facility/account STATE_INCOMPLETE rather than applying later effects into an invalid sequence.
Limit blast radius and prioritise by decision dependency
One bad account should not halt the institution. Partition by aggregate where possible, isolating incomplete state while unrelated facilities continue.
Payments · drawdowns · reversals
DPD transitions · limit changes
Non-critical metadata
Priority is illustrative and cannot ignore prerequisites: an identity event may control which facility belongs to a high-impact decision. Follow Event → State → Decision dependencies, not labels alone.
Under load, defer non-critical processing; never equate load shedding with event loss. Give live traffic protected pools/quotas and throttle replay so historical rebuild cannot starve current financial events.
A broker checkpoint is not automatically a financial-state commit
| Sequence | Risk | Control |
|---|---|---|
| State commits → process crashes → offset not committed | Redelivery applies effect twice | Idempotent event/effect identity |
| Offset commits → state transaction fails | Event may be skipped | Atomic claim/state/status or detectable reliable pattern |
Where possible, claim event, mutate state and persist processing status atomically. Across systems, use inbox/outbox or equivalent reliable patterns. A checkpoint records offset, state version and processing time, but correctness depends on their transactional relationship.
Recovery ends after catch-up, reconciliation and decision revalidation—not restart
Autoscaling helps compute bottlenecks but not database locks, external latency or hot partitions. Monitor freshness per partition; global averages hide one high-volume facility serialising its ordered events.
Replay may pause live on an affected partition or merge backlog/live under strict ordering. Both are valid trade-offs; neither may violate aggregate causality.
Transport health, data health and decision health are distinct
| Layer | Question |
|---|---|
| Source health | Is upstream producing complete, valid events? |
| Pipeline health | Are events durably ingested and processed? |
| State health | Is derived state coherent, complete and current? |
| Decision health | Are decisions using inputs within their budgets? |
A circuit breaker can stop hammering a failing dependency, but it cannot detect a successful response containing stale data. Heartbeats can distinguish true business silence from source outage. Incomplete feature windows must return INCOMPLETE, never a normal scalar without warning.
The slowest critical dependency dominates decision freshness. Define budgets by path—Payment → Collections, Drawdown → Exposure, DPD → EWS—not one platform-wide SLA.
Backlog catch-up can reveal decisions made on incomplete state
If the payment stream lagged from 10:15 to 10:42, identify payment-dependent decisions in that interval. Reconstruct state as known during the incident and corrected state after recovery, then compare outcomes.
Incident materiality depends on lag, exposure, decision count, decision delta and action impact. Do not automatically reverse historical actions; prepare evidence for governance.
| Gate | Proof |
|---|---|
| Backlog | Within normal operating range |
| Freshness | Critical state and features caught up |
| Replay | Errors and quarantined dependencies resolved |
| Reconciliation | Recovered state matches authority at aligned cut-off |
| Decision impact | Affected decision population identified |
Snapshots accelerate replay but do not become truth
Verify snapshot version and integrity. If corrupted, replay from an earlier valid point. Recover one affected aggregate instead of the whole portfolio where possible.
Durable event history is a business control: without it, deterministic recovery is impossible. Recovery-point and recovery-time goals are decision-specific; collections suppression may tolerate less delay than monthly ECL.
A golden failure stream tests the failure windows—not only the happy path
| Test | Expected proof |
|---|---|
| Burst | Lag rises, events remain durable, degradation activates |
| Sustained overload | Catch-up plan and freshness guards remain explicit |
| Retry storm | Backoff/jitter prevent retry amplification |
| Poison event | Quarantine limits blast radius and marks dependent aggregate incomplete |
| Checkpoint crash | Crash after state commit causes no duplicate financial effect |
| Stale decision | Held payment consumer blocks/degrades collections according to policy |
| Live + replay | Replay capacity never starves critical live traffic |
| Recovery replay | Final state equals full deterministic replay |
| Incident impact | Decisions in stale interval compare with corrected state |
| Recovery gate | Normal mode returns only after all gates pass |
The golden sequence includes normal payments, slowdown, growing backlog, a duplicate, a poison event, restart, replay, catch-up and reconciliation. Expected outcomes include no loss, no duplicate financial effect and a visible stale-state guard.
Technical green can still mean business red
Monitor p50, p95, p99 and maximum event-to-state latency by event type, source, partition and decision consumer. Prioritise alerts by decision-impact potential, not every lag equally.
A broker can be healthy while the payment source has stopped, risk state is stale and decisions are wrong. Business observability must link infrastructure lag to financial state and affected decisions.
The Entimema architecture protects decisions while the pipeline recovers
- Detect lag
- Identify critical decision dependencies
- Expose state freshness
- Degrade deliberately
- Protect event durability
- Isolate bad events
- Recover from checkpoint
- Replay idempotently
- Reconcile state
- Revalidate affected decisions
- Resume normal mode
A Risk Infrastructure Resilience Agent can diagnose recovery without altering financial state
A controlled agent can monitor lag and backpressure, identify decision paths outside freshness budgets, classify bottlenecks and retry amplification, detect poison patterns, track catch-up, compare replayed with authoritative state and identify decisions requiring revalidation.
Financial Data
Preserve durable events, state lineage and reconciliation evidence.
Decision Automation
Credit Risk
Continue with Event-Driven Decision Triggers, Real-Time Utilisation and Exposure Monitoring, Streaming Behavioural Features, From Batch ETL to Event-Driven Credit Risk Architecture, Idempotency in Payment and Credit Event Processing and Late-Arriving Events and Backdated Corrections. Silent schema detection, real-time collections state and decision-system observability remain future research directions—not fabricated routes.