HomeResourcesCase study
Case study

Why Adding Servers Made LinkedIn Slower

By The SDL team·4 min read·Updated Sep 16, 2026

For fan-out queries, scaling out amplifies the tail instead of taming it. Your users live in the p99, and the p99 doesn’t care about your average.

Here is a fact that breaks most people’s intuition: for certain queries, adding more servers makes them slower. LinkedIn ran straight into it, and the culprit is the most underrated number in distributed systems — the tail.

The feature was “People You May Know”-style scoring in Venice, LinkedIn's derived-data store. A single request is a large multi-key lookup that has to touch nearly every partition — and therefore nearly every server — to assemble its answer. As the cluster grew horizontally, p99 latency got worse, not better. The thing they did to handle more load was deepening the latency problem.

Plain English

A fan-out (or scatter-gather) request splits into many sub-requests sent to many servers, and can't finish until the last one comes back. That “wait for the slowest” rule is the whole story. Your request is only as fast as the unluckiest server it touched.

Now the trap: every server occasionally has a slow moment — a garbage-collection pause, a disk hiccup. The more servers a single request must wait on, the higher the odds that at least one of them is having a bad moment right now. Add servers to handle load, and you add chances to get unlucky. The average stays fine; the tail gets vicious.

The math that should be tattooed on every architect

Say each server responds slowly just 1% of the time. A request touching one server is slow 1% of the time — no problem. But a request that fans out to 100 servers is slow whenever any of them is slow: 1 − (0.99)^100 ≈ 63%. The same per-server reliability that's invisible at small scale becomes the dominant experience at large fan-out. This is tail latency amplification, and it's why scaling out a fan-out workload can backfire.

The cruel math of fan-out: more servers can mean SLOWER p99 One PYMK request must query EVERY partition, then wait for the slowest reply. 4 servers P(at least one slow) is modest. Tail stays tame. 40 servers (scaled out) More servers → far higher chance AT LEAST ONE is slow → the request waits on it. If each server is slow 1% of the time, a 100-way fanout is slow ~63% of the time. 1 − (0.99)^100 ≈ 0.63. Horizontal scaling amplifies the tail instead of taming it. Venice’s fixes attack the tail, not the average: · smarter partition assignment (touch fewer servers) · cut network bandwidth per request · RocksDB migration to kill GC pauses (a top tail-latency source) · evaluate HTTP/2 multiplexing You don’t fix fan-out tail by adding capacity. You fix it by making each node’s worst case rarer.
Scaling out amplifies the tail. A fan-out request waits on its slowest participant, so more participants means a higher chance of hitting a slow one. The fix is making each node's worst case rarer, not adding nodes.
Now the engineering

Because you can't fix this by adding hardware, LinkedIn attacked the tail directly. Partition-assignment optimizations reduce how many servers a single request must touch — fewer participants, smaller chance of an unlucky one. Network-bandwidth reductions cut the per-request cost so each sub-request is lighter. A migration to RocksDB cut garbage-collection pauses, one of the biggest sources of random per-node slowness (the same GC-tail problem Discord hit). And they evaluated HTTP/2 to multiplex sub-requests more efficiently.

Notice the through-line: every fix either reduces the number of nodes touched or reduces each node's probability of a slow moment. Those are the only two levers against fan-out tail. Throughput — the thing horizontal scaling buys — isn't on the list.

wait-for-slowest
the fan-out rule
~63%
slow rate at 100-way fan-out, 1%/node
RocksDB
migrated to kill GC tail

The gap it reveals

Engineers reach for “scale horizontally” as a reflex. The realization that separates seniors is that for fan-out workloads, scaling out can amplify tail latency rather than reduce it — because the request waits on the slowest of an ever-growing set. Knowing the probability math (1 − (1−p)^n) and that the fixes target node count and per-node tail, not throughput, is genuinely advanced.

In the interview room

Any scatter-gather design (search, feed scoring, recommendations) invites: “what happens to p99 as you add nodes?” The naive answer assumes it improves. The strong answer: “for fan-out, p99 can degrade with more nodes due to tail amplification, so I'd limit nodes-touched, hedge slow sub-requests, and attack per-node tail sources like GC.” That single insight signals deep distributed-systems maturity.

The reframe

“Just scale horizontally” is the most reflexive advice in our field, and for fan-out workloads it's a trap. Throughput and tail latency are different problems with opposite responses to scaling out. LinkedIn's Venice work is a reminder that the average hides the experience — your users live in the tail, and the tail does not get better just because you added boxes.

For fan-out, the enemy isn't load. It's the slowest node you can't stop touching.

Primary source →
engineering.linkedin.com — Supporting Large Fanout Use Cases at Scale in Venice

Want feedback on your design?

The weekly teardown

One real-world architecture, every week.

How real companies actually built it: the design, the trade-offs, and what to say about it in an interview. Free, and one click to unsubscribe.

Related articles