1
Traffic: users × actions
requests and QPS
Why: everything downstream multiplies off this number, so state it first.
- 5 conversations/user/day × 4 turns = 20 turns/user/day
- 1M users × 20 = 20M requests/day
- 20M ÷ 86,400 s ≈ 230 QPS average
- peak ≈ 3x average ≈ 700 QPS
"I'll size for peak, about 700 requests per second, because rate limits and capacity bite at peak, not on average."
sizing for the average. Traffic follows time zones and work hours, so a 2–5x peak factor is normal.
2
Tokens per request
input + output
Why: this is the number that decides cost. Break input into its parts so you can pull levers on each.
- Input ≈ 2,000 tokens: system prompt + conversation history + retrieved documents + the new message.
- Output ≈ 300 tokens: a typical chat reply.
- daily input = 20M × 2,000 = 40B tokens
- daily output = 20M × 300 = 6B tokens
using one turn's size. History is re-sent every turn, so turn 4 carries turns 1–3. Use the average over the whole conversation.
3
Cost: tokens × price
per day, per month, per request
Why: cost per request is the number product and finance care about. Illustrative prices: $1 per 1M input, $5 per 1M output.
- input: 40,000M × $1/M = $40,000/day
- output: 6,000M × $5/M = $30,000/day
- total ≈ $70K/day ≈ $2.1M/month
- $70K ÷ 20M turns ≈ $0.0035 per turn
"About a third of a cent per turn, two million a month. Input is 87% of the tokens and the larger share of cost, so caching and shorter context are my first levers."
assuming input dominates cost because it dominates volume. Output costs 5x more per token here, so it is still 43% of the bill.
4
Capacity: tokens per second at peak
rate limits or GPUs
Why: the provider limits you in tokens per minute, and self-hosted GPUs are sized in tokens per second.
- output: 700 QPS × 300 = 210K tokens/s ≈ 12.6M tokens/min
- input: 700 QPS × 2,000 = 1.4M tokens/s ≈ 84M tokens/min
- self-hosted: if one replica sustains ~2,500 output tokens/s at your latency target, 210K ÷ 2,500 ≈ 85 replicas, plus headroom
"Eighty-four million input tokens a minute at peak is beyond a default API tier, so I'd plan for a negotiated limit, several regions, or self-hosting part of the traffic."
checking only output tokens. Input-token limits are usually hit first because input is 7x larger.
5
Storage and latency
the two people forget
Why: logs grow fast, and long outputs keep connections open.
- logs: 20M turns × ~10 KB = 200 GB/day ≈ 6 TB/month
- embeddings: 10M chunks × 1,024 dims × 4 B ≈ 41 GB
- latency: 300 tokens ÷ 50 tokens/s ≈ 6 s to finish, so stream it
- open streams: 700 QPS × 6 s ≈ 4,200 at once (Little's law)
"Two hundred gigabytes of logs a day means I'd set a retention window and sample full traces rather than keep everything."
quoting total latency only. Budget time to first token (network + retrieval + prefill) separately from decode time.