A pacing budget table is the fastest way to make monitoring outputs replayable. Instead of “try faster when we fall behind”, you decide upfront how many retries, how much backoff, and how much variance a window can tolerate before it becomes non-comparable.
The decision this table supports
The table answers one question: when a slice is slowing down, do we keep pushing, or do we stop and mark the window as non-comparable? That decision is what prevents retry storms from turning into noisy trends.
Signals to collect first
Before you fill the table, collect per-slice metrics: request rate, timeout rate, 429 rate, retry count distribution, and a simple usable-record ratio. If you cannot compute usable records, you will optimize the wrong thing.

How to read the budget in production
Use the budget as a gate, not a suggestion: when retries hit the cap, stop spending. When backoff exceeds the ceiling, stop spending. When the usable-record ratio falls below the floor, stop summarizing and record the window as non-comparable.
That makes downstream summaries safer: you can explain gaps without inventing a trend.
Put it into daily operations
Make the budget visible in your run logs and alerts. The goal is to catch drift early: a budget breach is a signal to adjust pacing, isolate a template variant, or split the slice, not to “add more concurrency”.
FAQ
Isn’t stopping early wasting data?
Stopping early protects comparability. A larger pile of non-comparable records usually costs more time to debug than a clean no comparable snapshot result.
Can one budget fit every market?
No. Budget by slice. Markets with heavier localization or more variants need tighter gates and slower pacing to keep outputs replayable.
