Interval 10s. Aggregate 60k requests per minute.

The chat UI inherited a 10-second polling loop.

You've built this shape a hundred times. setInterval, fetch, render what came back. Live feeds at work, dashboards you hacked together — same loop, different endpoint. Nobody ever made you defend the number you put in that interval. Drag the dial below and watch two counters you probably never looked at side-by-side: aggregate req/min and worst-case latency. The dot on the plot traces where your choice lands.

Requests/min/user6
Aggregate req/min @ 10k users60k
Empty responses0%
Max observed latency (this run)0ms
Theoretical worst-case (= interval)10s
Polls fired0
10s
100ms1s10s60s

At 10s load drops to “60k req/min”, but new events can wait up to 10s before the next tick picks them up.

The Pareto front

The dashed curve is the frontier — cost × latency ≈ 6e8. Your dot can approach it, never cross it. Every interval value you try lands somewhere on this grid.

aggregate req/minworst-case latency

Drag further to reach the curve.