api-design
This skill should be used when the user needs to "design the API", do "endpoint design", pin down a "request/response shape", choose a "pagination" strategy…
This skill should be used when the user needs to "estimate QPS", "back-of-the-envelope" (BOTEC) numbers, "how much storage / bandwidth", "how many servers", "peak load", "capacity planning", or wants the standard latency / throughput / availability numbers to ground a design
$ npx -y skills add proyecto26/system-design-skills --skill back-of-the-envelope --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/back-of-the-envelopeContext preview
The summary Claude sees to decide when to auto-load this skill.
This skill should be used when the user needs to "estimate QPS", "back-of-the-envelope" (BOTEC) numbers, "how much storage / bandwidth", "how many servers", "peak load", "capacity planning", or wants the standard latency / throughput / availability numbers to ground a design
name: back-of-the-envelope description: This skill should be used when the user needs to "estimate QPS", "back-of-the-envelope" (BOTEC) numbers, "how much storage / bandwidth", "how many servers", "peak load", "capacity planning", or wants the standard latency / throughput / availability numbers to ground a design (latency table, QPS rates, powers of two, nines). Use it whenever a design decision hinges on scale — convert any "high traffic" / "huge data" phrase into concrete numbers before choosing components, even if the user doesn't say "estimate".
Turn vague scale ("high traffic", "huge data") into a few concrete numbers that *decide the design*. BOTECs are quick, approximate calculations — feasibility checks, not precision. The point is the process and directional correctness: they tell you when a single database won't do, when caching is forced, when a write spike needs a queue.
> A design for 1k QPS and one for 1M QPS are different systems. 10 GB fits in > RAM; 10 TB needs distributed storage. Estimate first, choose second.
At step 2 of any design (right after requirements), and any time a choice depends on scale: sizing the read vs write path, deciding sharding vs a single node, justifying a cache, or sanity-checking a proposed component against load.
Don't chase precision or model every microservice — that's the opposite of the technique. Don't estimate what won't change a decision (YAGNI). Round aggressively: "99,987 / 9.1" is "100,000 / 10". Always **label units** and **write assumptions down**.
Estimates are only as good as their inputs. Pin down:
Work each as a single multiply/divide chain. Full worked numbers and the CPU-time derivation are in `references/estimation-recipes.md`.
(state your peak factor).
`storage/day × retention_days` (watch base-10 vs base-2; storage is sold base-10).
dominates and costs money).
below as the divisor.
check the working set fits RAM (else it's an IO-bound, disk-backed design).
These are the reference points to *know*, so you can estimate without lookups. Full tables (latency, server specs, request types, powers of two, nines) live in `references/numbers-to-remember.md` — load it when you need a specific figure.
The two that drive most decisions:
| What | Rule of thumb | |---|---| | Single SQL/RDBMS node | ~**1,000** QPS | | Key-value store node | ~**10,000** QPS | | Cache server (Redis/Memcached) | ~**100,000–1M** QPS | | One modern CPU core | ~**1,000** simple requests/s → a 64-core box ≈ **64k** req/s | | Read 1 MB: memory vs SSD vs disk | ~**μs vs tens–hundreds of μs vs ms** (memory ≫ SSD ≫ disk) |
**Think in orders of magnitude, not exact values.** CPU-bound work is ~1×, memory-bound ~10×, IO-bound ~100× the time. That ratio, not the decimals, is what shifts an architecture.
Distilled from the recipes and the ways estimates mislead.
**Do**
ratio (1× / 10× / 100×) is what shifts an architecture, not the decimals.
default; spikier for bursty workloads) before picking capacity.
spike pull the design in opposite directions.
the chain can be re-checked when an input changes.
**Don't**
support; "99,987" is "100,000".
point-query rule of thumb; range scans, joins, and fat payloads can be 10× worse — use it for the order of magnitude, then validate with real benchmarks.
is base-10 — close enough for an estimate, but only if the units are stated.
architecture, skip it (YAGNI).
Estimation is usually a table, not a picture — keep the numbers and assumptions inline. When a derived number forces a structural change (e.g. "300k QPS > single DB → shard / add replicas"), that belongs in the architecture diagram itself; use the `architecture-diagram` skill when drawing the design those numbers justify.
Design scalable systems the way strong engineers actually do — by reasoning, not by memorizing diagrams.
Repo: proyecto26/system-design-skills
This skill should be used when the user needs to "design the API", do "endpoint design", pin down a "request/response shape", choose a "pagination" strategy…
This skill should be used when a system design needs a diagram — "draw the architecture", "diagram this system", "show the components", "make an…
This skill should be used when the user wants a "blob store" or "object storage", names "S3" or an S3-compatible store, needs to "store images / video /…
This skill should be used when the user asks about a "caching strategy", "cache invalidation", "what to cache", "read-through vs write-through vs write-back",…
This skill should be used when the user asks about the "CAP theorem", "PACELC", a "consistency model", "eventual vs strong consistency", "read-your-writes",…
This skill should be used when the user asks about a "CDN", "edge caching", "static asset delivery", "media / video delivery", "geo distribution of content" or…