← learning log
tilJul 2026·1 min read

System design lesson: size hot storage by concurrency, not users

Designing DocuMind AI, my first hot-tier estimate was ~10.5 TB. The right answer was ~21 GB — here's the mistake.

While designing a 1M-user document Q&A system I sized the vector store as "keep 5 sessions warm per user" → ~10.5 TB.

The fix

Hot storage tracks concurrent access; cold storage tracks total history.

  • 5–10k concurrent sessions × ~2.1 MB (embeddings + extracted text) ≈ 10.5–21 GB hot
  • Everything else lives in S3 → Glacier and is rehydrated on access (cache-aside at session level)

That's a 500–1000× difference from conflating the two.

Second lesson: refusal belongs in code

"Only answer from the context" in a system prompt is not a guarantee. A deterministic confidence gate on retrieval scores — skipping the LLM entirely when low — is.

Full case study: documind-ai-rag-system

#system-design#rag#capacity-planning