Every source behind this page, graded. Filter by kind. The ledger with
per-claim quotes ships alongside this file as sources.md.
Postmortem
GitHub2018-10
October 21 post-incident analysis
The canonical published backlog: 5M+ webhook events and 80k Pages builds queued
during a 24-hour database incident, drained under a TTL that dropped ~200k payloads,
paced to avoid overloading receiving third parties.
Carry forwardDecide TTL and replay pacing before the
incident; a backlog is a load test aimed at your consumers and other people's
servers.
github.blog/2018-10-30-oct21-post-incident-analysis
Postmortem
Honeycomb2023-08
Incident Review: What Comes Up Must First Go Down
An ingest death spiral on 2023-07-25: ten minutes of degraded ingestion, then a
cascade. Recovery required deliberately circuit-breaking intake because restarting
against cold caches would re-enter the failure.
Carry forwardAn intentional off-switch for intake is a
recovery feature; without it every restart replays the overload.
honeycomb.io/blog/incident-review-what-comes-up-must-first-go-down
Postmortem
incident.io2022-11
Intermittent downtime from repeated crashes
A panic in a Pub/Sub consumer goroutine, uncatchable by the parent's recover,
crash-looped the whole application. The team's first hypothesis was a poison-pill
message re-triggering on each redelivery.
Carry forwardRedelivery weaponises bad input; poison-pill
catch-count-sideline is part of the consumer contract.
incident.io/blog/intermittent-downtime
Eng blog
Slack2017-12
Scaling Slack's Job Queue
1.4B jobs/day, 33k/s peak, and the 2016 outage in which a full Redis could not
dequeue because dequeueing needed free memory. The fix: Kafka as a durable buffer
in front, with dedicated relay services.
Carry forwardThe drain path must not depend on the
resource that fills; separate acceptance from scheduling.
slack.engineering/scaling-slacks-job-queue
Eng blog
Amazon (D. Yanacek)2019-12
Avoiding insurmountable queue backlogs
The Builders' Library treatment: backpressure upstream, delay and surge queues,
per-tenant fairness throttling, heartbeating long-running work so leases survive
overload.
Carry forwardMulti-tenant queues need fairness before the
shared store; one tenant's burst is every tenant's backlog otherwise.
aws.amazon.com/builders-library/avoiding-insurmountable-queue-backlogs
Eng blog
Meta2021-02
FOQS: Scaling a distributed priority queue
A priority queue on sharded MySQL moving roughly one trillion items a day, with
per-item priority and deliver-after, prefetch buffering, and lease-based ack/nack
with customer-defined retry policy.
Carry forwardDurable queues at any scale are databases
with a scheduling API; build on the storage your operators already run.
engineering.fb.com/2021/02/22/production-engineering/foqs-scaling-a-distributed-priority-queue
Eng blog
Meta2023-01
Asynchronous computing at Meta: Overview and learnings
Introduces delay tolerance as the scheduling primitive: under overload the platform
defers jobs that declared they can wait, spreading load over time. A separate
flow-control layer meters dequeue with quotas and downstream protection.
Carry forwardAsk every producer for a delay tolerance at
enqueue time; it is the cheapest load-shedding taxonomy you will ever build.
engineering.fb.com/2023/01/31/production-engineering/meta-asynchronous-computing
Eng blog
Dropbox2020-11
How we designed Dropbox ATF
A company-wide async task framework: 10,000 tasks/s design target, at-least-once
execution, no concurrent execution of the same task, and a stated SLO of 95% of
tasks starting within 5 seconds of schedule.
Carry forwardPublish start-latency SLOs for async work;
without one, "it's queued" silently becomes "it's lost".
dropbox.tech/infrastructure/asynchronous-task-scheduling-at-dropbox
Eng blog
Netflix2020-11
Keeping Netflix Reliable Using Prioritized Load Shedding
Requests pre-classified as non-critical, degraded, or critical; a threshold moves
with CPU, failure rate and latency, shedding the lowest class first, validated
continuously with chaos experiments.
Carry forwardShedding quality is decided by the taxonomy
you built before the incident, not by the algorithm during it.
netflixtechblog.com/keeping-netflix-reliable-using-prioritized-load-shedding
Eng blog
Netflix2024-06
Enhancing Netflix Reliability with Service-Level Prioritized Load Shedding
The 2020 gateway mechanism pushed into individual services as a library, shedding
by CPU and priority bucket. Measured: user-initiated requests at 100% availability
while prefetch is throttled; above 99.4% through a 12x prefetch spike.
Carry forwardPriority shedding measurably converts "everyone
suffers" into "background work suffers"; the numbers justify the tagging work.
netflixtechblog.com/enhancing-netflix-reliability-with-service-level-prioritized-load-shedding
Eng blog
LinkedIn2019-10
How LinkedIn customizes Apache Kafka for 7 trillion messages per day
The published ceiling of queueing scale: 100 clusters, 4,000+ brokers, 100k topics,
7M partitions, 7T messages a day, run on a patched internal Kafka release branch.
Carry forwardAt the top end, operating the queue becomes
its own engineering organisation; budget for that or rent.
engineering.linkedin.com/blog/2019/apache-kafka-trillion-messages
Eng blog
Fred Hebert2014
Queues Don't Fix Overload
The essay every queue design review should quote: a buffer in front of steady
overload accumulates in-flight data "only to lose it sooner or later", making
failures rarer but bigger. The real choices are backpressure or shedding.
Carry forwardA queue moves the drop-or-block decision; it
never removes it. Find the bottleneck the queue is hiding.
ferd.ca/queues-don-t-fix-overload.html
Article
InfoQ2026-05
The Mathematics of Backlogs: Capacity Planning for Queue Recovery
Drain time equals backlog over surplus capacity; a fleet provisioned exactly for
steady state never drains; a 10% spike harmless at 80% utilisation is catastrophic
at 90%; headroom formulas for recovery-time objectives.
Carry forwardSize consumer fleets for a stated
recovery-time objective, not for steady-state throughput.
infoq.com/articles/capacity-planning-queue-recovery
Paper
Facebook (B. Maurer)2015-11
Fail at Scale (ACM Queue 13:8)
The queueing chapter of Facebook's reliability practice: FIFO under overload spends
capacity on abandoned requests; adaptive LIFO serves the newest during congestion;
CoDel with M=5ms, N=100ms bounds standing queues. Shipped in HHVM and Wangle.
Carry forwardQueue discipline is a run-time decision;
the right order under load is not the right order at rest.
queue.acm.org/detail.cfm?id=2839461
Paper
Nichols & Jacobson2012-07
Controlling Queue Delay (CACM 55:7)
The bufferbloat paper that named the distinction this whole field turns on: good
queues convert bursty arrivals into smooth departures; bad queues are standing
queues that only add delay. CoDel controls on experienced delay, parameterlessly.
Carry forwardMeasure queues in time waited, not items
held; depth is meaningless without the drain rate.
dl.acm.org/doi/10.1145/2209249.2209264
Paper
Huang et al., 11 orgs2022
Metastable Failures in the Wild (OSDI '22)
22 incidents across AWS, Google, Azure, IBM, Spotify and others in which a degraded
state persisted after its trigger vanished; retry amplification sustained more than
half; durations 1.5 to 73.53 hours.
Carry forwardA backlog is a sustaining effect: plan the
dig-out as its own failure mode with its own capacity.
usenix.org/conference/osdi22/presentation/huang-lexiang
Decision record
Kuberneteschecked 2026-09
KEP-1040: Priority and Fairness for API Server Requests
A complete written argument for bounded per-flow queues with shuffle sharding
(a light flow shares all queues with a heavy one at odds around 1 in 5.4 billion),
rejection of new arrivals over eviction of queued ones, and an explicit goal order:
overload protection, then fairness, then throughput.
Carry forwardWrite the goal order down; every queueing
parameter fight is really a fight about it.
github.com/kubernetes/enhancements · keps/1040-priority-and-fairness
Specification
Reactive Streams WGv1.0.4
Reactive Streams for the JVM
The industry's agreed protocol for demand: consumers signal request(n), producers
may not exceed outstanding demand, and therefore every mediating queue can be
bounded. Authored by engineers from Netflix, Lightbend, Pivotal, Red Hat, Twitter
and others; absorbed into java.util.concurrent.Flow.
Carry forwardBackpressure is a protocol between
components, not a buffer setting inside one.
github.com/reactive-streams/reactive-streams-jvm
Source
Meta (folly)current 2026
folly/executors/Codel.cpp
The production CoDel with its divergence documented in a comment: instead of the
paper's escalating drop schedule, requests with queueing delay over twice the target
are sloughed off during overload, because that "empirically works better for our
services".
Carry forwardExpect to adapt textbook control algorithms;
keep the deviation and its reason in a comment where the next reader will look.
github.com/facebook/folly · folly/executors/Codel.cpp
Source / PR
RabbitMQ2024-12
PR #12906: Restore credit_flow to classic queues
Producer flow control "unintentionally removed in 4.0" during the mirroring
removal; a user hit unbounded growth, a contributor restored it behind a flag
defaulting to the 3.x behaviour, merged and backported.
Carry forwardTest for the presence of backpressure, not
only its behaviour; a silent safety net can vanish in a refactor.
github.com/rabbitmq/rabbitmq-server/pull/12906
Source / rejected PR
RabbitMQ2019-2020
PR #2129: Adjust quorum queue flow control (closed unmerged)
A proposal to enter the flow state earlier, protecting publish-heavy pessimistic
cases. Closed after a maintainer objected that it "optimizes for the pessimistic
case" without evidence the workload is common; superseded by later work.
Carry forwardDefaults protect the vendor's median
customer; your overload posture is your own tuning burden, with benchmarks.
github.com/rabbitmq/rabbitmq-server/pull/2129
Source / issue
Sidekiq2022-04
Issue #5282: Latency vs queue length
A practitioner's measurements during a Redis-full incident: an apparently
one-to-one correlation between queue depth and reported job latency while draining,
persisting even in an isolated test with only workers consuming.
Carry forwardLittle's Law shows up whether invited or
not: at fixed drain rate, depth is latency. Alert on age of the oldest item.
github.com/sidekiq/sidekiq/issues/5282
Source
Shopifysince 2017-05
Shopify/job-iteration
The library that makes Shopify's long-running jobs interruptible: work is expressed
as an enumerator, a checkpoint persists after each iteration, and interruption
re-enqueues rather than restarts. Premise stated in the README: with frequent
deploys, a long job "will be either lost or restarted from the beginning."
Carry forwardMake long jobs resumable at design time;
worker churn is routine, and a backlog of half-done restarts is self-inflicted.
github.com/Shopify/job-iteration
Vendor docs
NATS (Synadia)checked 2026-09
NATS documentation: Slow Consumers
The bound-and-drop pole stated as philosophy: NATS "favors the approach of
protecting the system as a whole over accommodating a particular consumer".
Defaults: 65,536 pending messages or ~64 MB per subscriber; the server disconnects
a consumer it cannot flush within a 2-second write deadline.
Carry forwardIf you adopt a drop-by-design transport,
the delivery guarantee moves into your application layer; budget for it there.
docs.nats.io/running-a-nats-service/nats_admin/slow_consumers
Pricing
AWS SQS (via AWS Fundamentals)2025
SQS pricing, documented
Standard queues: $0.40 per million requests after the first million, tiering to
$0.24 above 200B/month; each 64 KB of payload bills as one request; Fair Queues
(July 2025) add $0.10 per million when tenant grouping is used.
Carry forwardRented queues price per request, so chatty
heartbeats and small messages dominate the bill before throughput does.
awsfundamentals.com/blog/sqs-pricing
Talk
Netflix (S. Podila)2021
Microservices to Async Processing Migration at Scale (QCon Plus)
The migration of Netflix's playback-data ingest from synchronous microservices,
whose backpressure reached clients, to a durable queue. Transcript on InfoQ; the
scale-down caveat about lag-based autoscaling is the part worth the visit.
Carry forwardLag tells you when to scale up and nothing
about when to scale down; pair it with utilisation.
infoq.com/presentations/migration-microservices-scale
Talk
Zach Tellman2015
Everything Will Flow (Clojure/West)
Queueing theory applied to application design: why unbounded queues make failure
rare but total, and why every queue needs an explicit policy. Cited here to its
published abstract; the video could not be fetched from this session's network, so
no timestamp is given.
Carry forwardEvery in-process channel and thread-pool
queue is a queue; the ones nobody configured are the ones that fail first.
youtube.com/watch?v=1bNOO3xxMc0