Pattern · seen in 1 breakdown across 1 company

Deadline Propagation

Definition

Have clients attach a timeout hint to every request — how long they are willing to wait — and propagate the remaining time transitively across every hop of the call graph, so each downstream service knows whether its answer can still be useful. Servers enforce the deadline where work is admitted: evaluate it at dequeue, and drop requests whose deadline has already passed or cannot plausibly be met, spending capacity only on answers someone is still waiting for. The pattern attacks overload's cruelest arithmetic: a reply after the client's timeout is a success in the server's metrics and an error in the client's reality, and every cycle spent producing it was capacity donated to the feedback loop.

The plumbing carries real costs the pattern's adopters must own. Absolute-time deadlines require synchronized clocks across the fleet; duration-based deadlines require monotonic timers and an honest answer to when the stopwatch started — which deep TCP buffers can falsify, since a request may age invisibly before the server ever reads it. Latency estimation (dropping requests whose deadline is shorter than the predicted service time) is powerful and backfire-prone: the estimator cannot know a cache hit from a miss or a fast partition from a slow one. Boundary against Queue-Age Bounding: that discipline drops work for being stale by the server's local clock with no client involvement; deadline propagation drops work for being useless by the client's declared budget — the two compose, one guarding each side of the same waste. Boundary against Retryable Error Classification: classification decides whether a failed request may try again; deadlines decide whether an in-flight request is still worth finishing.

When it applies

01Service-oriented architectures with deep call graphs, where a bottom-layer slowdown silently converts upstream work into waste and retries
02Systems whose overload behavior includes servers diligently completing responses their clients stopped waiting for
03Request paths with queues at multiple layers (executors, sockets, load balancers) where admission-time and service-time can diverge badly under load

Tradeoffs

Clock discipline is a hard dependency: absolute deadlines need fleet-wide time synchronization, durations need monotonic timers, and both need a truthful start-of-waiting timestamp that buffering can hide
Transitivity is all-or-nothing in value: one hop that fails to propagate the remaining budget re-blinds every service beneath it
Deadline-aware dropping interacts with retries: a dropped-at-dequeue request usually returns faster than a timeout, which can accelerate client retry loops unless paired with backoff and rejection signaling

The same move, 1 ways

Every row is a production system that bet on this pattern — the note says how, in that system's own terms.

Amazon (AWS)
Amazon Builders' Library
2019
A client says how long it's willing to wait, each service passes the remaining time along to the next one, and a server checks that deadline as it pulls each request off its queue, dropping the ones whose clients have already given up instead of finishing answers nobody is listening for. The article is honest about what this costs to build: clocks that agree across machines, timers that never run backward, and the awkward fact that a request can sit in a network buffer so long the client is gone before the server even starts timing. The payoff is that a late reply is a success only from the server's point of view, so catching doomed work early is worth the plumbing. Read the breakdown →

Problems this pattern answers

The walls where its breakdowns live — each opens the cross-company comparison.