Skip to main content
cd ../lexicon
sys/docs/lexicon/bimodal-behavior.md
Lexicon

Bimodal Behavior

Difficulty: Advanced
3 min read

In plain English

Plain definition

A system exhibits bimodal behavior when it has two operating states — normal and degraded — with an abrupt, non-linear jump between them rather than smooth degradation as load increases.

Bimodal behavior emerges whenever a system has an internal state machine, cache, or dependency graph with a hard threshold: below it, operations are cheap; above it, operations become expensive by orders of magnitude, and there is no smooth interpolation between the two states. Classic examples include a cache that is 99% hit-rate falling to 40% hit-rate after an eviction storm, a connection pool that behaves fine until it exhausts and every subsequent request pays a full TCP+TLS handshake, or a control plane that serves from an in-memory index until it falls back to a cold database scan. The danger is not the existence of a slow path — it is that the slow path is rarely exercised, rarely load-tested, and often was never sized for the traffic volume that triggers it.

The architectural hazard is positive feedback at the mode boundary. Once a system tips into its degraded mode, common resilience primitives can push it further in rather than pulling it back: client-side retries multiply load on an already-struggling backend, autoscalers react too slowly to the step-function demand spike, and health-check-based failover routes traffic away from the struggling instance onto peers that then also cross their own threshold. This is the mechanism behind many well-documented outages where a single AZ failure cascades into a full regional event — the remaining healthy nodes absorb rerouted traffic and bimodally flip into their own failure mode, a chain reaction rather than a linear degradation.

Mitigating bimodal behavior requires deliberately flattening the transition curve so the system degrades gracefully instead of falling off a cliff. Practical techniques include:

  • Constant work patterns: designing the hot path and cold path to perform roughly the same amount of work (e.g., always writing to disk, never relying on a memory-only fast path that silently disappears).
  • Static stability: pre-provisioning capacity for the degraded mode rather than depending on real-time reaction (autoscaling, cache rebuild, leader re-election) to save you during the exact moment demand spikes.
  • Load shedding and admission control: capping the fraction of traffic allowed to touch the expensive path, converting an unbounded cliff into a bounded, predictable failure for a subset of requests.
  • Jittered backoff and circuit breakers: preventing synchronized retries from re-triggering the same threshold immediately after recovery.

Bimodal behavior is fundamentally a capacity-planning and testing problem disguised as a runtime bug. Load tests that only exercise steady-state traffic will never reveal the threshold, and post-incident reviews frequently discover that the failure mode was architecturally inevitable rather than a fluke, because nothing in the system’s design constrained how far past the threshold conditions could drift. Engineers who explicitly identify and load-test the mode boundaries of caches, pools, and quorum-based subsystems can convert catastrophic step-function failures into gradual, observable degradation — which is almost always preferable from an incident-response and blast-radius perspective.

Bimodal Behavior | KBY Lexicon