Capacity Planning Skill

Produce a capacity planning document for a service covering traffic forecasts, resource requirements, and scaling strategy.

Capacity Planning Skill — The Skill Playground: pick the Executive Update skill, fill in a few notes, hit run, and watch a structured executive… (from the mohitagw15856/pm-claude-skills README)

From the mohitagw15856/pm-claude-skills README — shows the whole collection, not only this skill. · view on GitHub

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/capacity-planning.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit mohitagw15856/pm-claude-skills/skills/capacity-planning#main ~/.claude/skills/capacity-planning

For one project only, change the path to .claude/skills/capacity-planning.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Capacity Planning Skill

Show the full text367 lines
namedescription
capacity-planningProduce a capacity planning document for a service covering traffic forecasts, resource requirements, and scaling strategy. Use when asked to plan infrastructure capacity, forecast resource needs, model traffic growth, define scaling strategy, or produce a capacity review for a service. Produces a structured capacity plan covering current baseline metrics, growth projections, resource requirements per tier, scaling strategy, cost projections, capacity triggers, and an infrastructure action roadmap.

Capacity Planning Skill

Produce a complete capacity planning document for a service. Capacity planning is not about predicting the future exactly — it is about understanding current headroom, modelling growth, and ensuring the team takes infrastructure action before a constraint becomes an incident.

A good capacity plan answers: what is running out first, how long before it runs out, what does it cost to fix it, and who decides when to act.

Required Inputs

Ask for these if not already provided:

  • Service name and description — what the service does and who depends on it
  • Current traffic and usage metrics — requests per second (or per day), active users, data volume — whatever units are most natural for this service
  • Current resource utilisation — CPU %, memory %, disk usage, connection pool utilisation, DB query throughput
  • Growth rate or projections — historical growth rate, or known upcoming events (product launch, sales cycle, seasonal peak)
  • Tech stack and infrastructure — cloud provider, compute type (VMs, containers, serverless), database, caching layer, CDN
  • Cost constraints — current infrastructure spend, acceptable cost ceiling, or target cost per unit of traffic

Output Format


Capacity Plan: [Service Name]

Service: [Name] | Team: [Team name] Author: [Name] | Last updated: [Date] Planning horizon: [12 months — [Month Year] to [Month Year]] Review cadence: [Quarterly]


1. Executive Summary

[3–5 sentences covering: current state, the most critical capacity constraint, the timeline before it becomes a risk, the recommended action, and the cost implication. Written for an engineering manager or VP who needs the key facts without reading the full document.]

Critical finding: [e.g. "The database connection pool will reach 90% utilisation within 6 weeks at current growth. Without action, this will cause request queueing and latency spikes under normal traffic."]

Recommended immediate action: [e.g. "Increase connection pool limit and add a read replica within the next 2 weeks."]

Estimated cost impact: [e.g. "Recommended changes add ~$[X]/month to infrastructure spend."]


2. Current Baseline

All metrics are 30-day averages unless noted. Date captured: [Date]

Traffic
Metric Value Peak (7-day) Notes
Requests per second (avg) [X req/s] [X req/s] [Peak time / day of week]
Requests per day [X M/day] [X M/day] —
Active users (DAU/MAU) [X] / [X] — —
[Service-specific metric — e.g. jobs processed/hour] [X] [X] —
[Service-specific metric — e.g. GB ingested/day] [X GB] [X GB] —
Compute
Resource Current utilisation Instance type Count Notes
CPU (avg) [X%] [e.g. c5.2xlarge] [X] Peak: [X%]
Memory (avg) [X%] — — Peak: [X%]
Network egress [X Mbps] — — —
Container / pod count [X] [e.g. 2 vCPU / 4 GB] — Auto-scaling range: [X–Y]
Database
Resource Current utilisation Spec Notes
CPU [X%] [e.g. db.r5.2xlarge] Peak: [X%]
Memory [X%] [X GB RAM] —
Storage used [X GB] of [Y GB] ([Z%]) [X GB provisioned] Growth: [~X GB/month]
IOPS (avg) [X] of [Y provisioned] [Y IOPS] Peak: [X IOPS]
Connection pool [X] of [Y max] ([Z%]) Max connections: [Y] [ORM pool size: X]
Query P99 latency [X ms] — [Slowest query: X]
Read/write ratio [X%] reads / [Y%] writes — —
Cache
Resource Current utilisation Spec Notes
Memory used [X GB] of [Y GB] ([Z%]) [e.g. cache.r6g.large] Eviction rate: [X%]
Hit rate [X%] — Miss rate: [Y%]
Connections [X] Max: [Y] —
Storage / Object Store
Resource Current usage Growth rate Notes
[S3 / GCS / Blob] [X GB / TB] [~X GB/month] [Lifecycle policies in place? Y/N]
Disk (if applicable) [X GB] of [Y GB] [~X GB/month] [RAID / EBS type]
Cost Baseline
Component Current monthly cost % of total
Compute (app servers) $[X] [X%]
Database $[X] [X%]
Cache $[X] [X%]
Storage $[X] [X%]
CDN / bandwidth $[X] [X%]
Other ([describe]) $[X] [X%]
Total $[X] 100%

Unit economics: $[X] per [1,000 requests / 1,000 users / GB processed]


3. Growth Projections

Assumptions
Assumption Value Source Confidence
Monthly traffic growth rate [X%] [Historical trend / product forecast] [High / Medium / Low]
Seasonal peak factor [+X% in [month(s)]] [Last year's data / expected launch] [High / Medium]
Upcoming events [e.g. Marketing campaign — [Month], expected +[X]% traffic spike] [Marketing plan] [Medium]
User growth [X new users/month] [Sales pipeline / growth model] [Medium]
Data growth [X GB/month] [Current trend] [High]
Traffic Forecast
Timeframe Req/s (avg) Req/s (peak) DAU Data volume (cumulative)
Now (baseline) [X] [X] [X] [X GB/TB]
+3 months [X] [X] [X] [X GB/TB]
+6 months [X] [X] [X] [X GB/TB]
+12 months [X] [X] [X] [X GB/TB]

Growth formula: [Baseline] × (1 + [monthly rate])^[months] + seasonal adjustment

Capacity Headroom Analysis

When does each resource run out at current utilisation and projected growth?

Resource Current utilisation Safe ceiling Headroom remaining Months to ceiling
App CPU [X%] 70% [X%] [X months]
App memory [X%] 80% [X%] [X months]
DB CPU [X%] 70% [X%] [X months]
DB storage [X GB] of [Y GB] 80% = [Z GB] [X GB] [X months]
DB IOPS [X] of [Y] 80% = [Z] [X IOPS] [X months]
DB connections [X] of [Y] 80% = [Z] [X] [X months]
Cache memory [X GB] of [Y GB] 75% = [Z GB] [X GB] [X months]
Storage (object) [X TB] No hard limit — cost trigger — [Cost trigger: $X/month]

Red flags (resources hitting ceiling within 3 months):

  • [Resource]: [current]% → ceiling in [X weeks] — Action required
  • [Resource]: [current]% → ceiling in [X weeks] — Action required

4. Resource Requirements

Compute Requirements
Timeframe Required instances Recommended instance type Auto-scaling range Notes
Now [X] [type] [min: X, max: Y] Current configuration
+3 months [X] [type] [min: X, max: Y] [Any instance type change needed?]
+6 months [X] [type or upgrade] [min: X, max: Y] [Consider [larger type / horizontal scale]]
+12 months [X] [type or upgrade] [min: X, max: Y] [State of horizontal vs vertical decision]

Memory headroom target: Maintain ≥30% available memory at average load; ≥20% at peak. CPU headroom target: Maintain ≥30% available CPU at average load; ≥15% at peak.

Database Requirements
Timeframe Instance type Storage IOPS Read replica Notes
Now [type] [X GB] [X] [Y/N] Current
+3 months [type] [X GB] [X] [Y/N] [Upgrade storage / IOPS]
+6 months [type or upgrade] [X GB] [X] Yes [Read replica recommended by this point]
+12 months [type] [X GB] [X] [X replicas] [Consider sharding / partitioning at this scale]

Storage growth management:

  • Current growth: [~X GB/month]
  • Storage auto-scaling: [Enabled / Not enabled — enable by [date]]
  • Archiving policy: [Records older than X months moved to [cold storage / archive tier]]
Cache Requirements
Timeframe Node type Nodes Memory Notes
Now [type] [X] [X GB] Current
+6 months [type] [X] [X GB] [Scale out or upgrade]
+12 months [type] [X] [X GB] [Cluster mode if >Y GB required]

5. Scaling Strategy

Compute — Horizontal Scaling

Decision: [Horizontal / Vertical / Both]

[State the scaling strategy and the reasoning. E.g. "The application is stateless and CPU-bound; horizontal scaling is preferred. Vertical scaling is a short-term fallback only."]

Auto-scaling configuration:

Scale-out trigger:  CPU > [X%] for [Y minutes] OR memory > [X%] for [Y minutes]
Scale-in trigger:   CPU < [X%] for [Y minutes] AND memory < [X%] for [Y minutes]
Min instances:      [X] (ensures HA across [X] AZs)
Max instances:      [Y] (cost ceiling)
Cooldown period:    [X seconds]
Warmup time:        [X seconds] (time for new instance to be healthy)

Limits of horizontal scaling:

  • [e.g. Database connection pool is the current bottleneck — adding more app instances without increasing DB connections will not help]
  • [e.g. Session affinity required for WebSocket connections — limits pure stateless scaling]
Database — Read Scaling

Strategy: [Read replica / Connection pooling via PgBouncer / Query caching / None needed yet]

When to add a read replica:

  • DB CPU sustained >60% for >30 minutes, OR
  • Read query P95 latency >50ms, OR
  • Connection pool utilisation >70%

Connection pooling:

  • Pooler: [PgBouncer / RDS Proxy / application-level / not configured]
  • Pool size: [X connections per app instance × Y instances = Z total]
  • Max DB connections: [configured to Z + 20% headroom]
Caching Strategy

Cache policy: [Cache-aside / Write-through / Write-behind] TTL strategy:

Data type TTL Invalidation method
[e.g. User profile] [5 minutes] [Explicit invalidation on update]
[e.g. Product catalog] [1 hour] [TTL expiry — eventual consistency acceptable]
[e.g. Session data] [24 hours] [Explicit invalidation on logout]

Cache miss handling: [Describe what happens on a cache miss — does it fall through gracefully or cause a thundering herd risk?]


6. Cost Projections

Infrastructure Cost Forecast
Component Now (monthly) +3 months +6 months +12 months
Compute $[X] $[X] $[X] $[X]
Database $[X] $[X] $[X] $[X]
Cache $[X] $[X] $[X] $[X]
Storage $[X] $[X] $[X] $[X]
CDN / bandwidth $[X] $[X] $[X] $[X]
Total $[X] $[X] $[X] $[X]
MoM growth % — [X%] [X%] [X%]

Unit economics trend:

Timeframe Cost per 1k requests Cost per user/month Notes
Now $[X] $[X] Baseline
+6 months $[X] $[X] [Improving / worsening — why]
+12 months $[X] $[X] [Target: $X per 1k requests]

Cost optimisation opportunities:

Opportunity Estimated saving Effort Timeline
[e.g. Reserved instances for baseline compute] $[X/month] Low Immediate
[e.g. S3 lifecycle policy — move objects >90 days to Glacier] $[X/month] Low This sprint
[e.g. Right-size [instance] — current is overprovisioned] $[X/month] Low This sprint
[e.g. Optimise top-5 slow queries — reduce DB compute need] $[X/month] Medium Next quarter

7. Capacity Triggers and Actions

Define the thresholds that require explicit action — not retrospective fixes after an incident.

Resource Watch (amber) Act (red — schedule work) Emergency (incident risk)
App CPU (sustained avg) >60% >70% >85%
App memory >70% >80% >90%
DB CPU >55% >65% >80%
DB storage >65% >75% >85%
DB connections >60% >70% >85%
Cache memory / eviction Hit rate <90% Hit rate <85% Hit rate <75%
Error rate >0.5% >1% >2%
P99 latency >2× baseline >3× baseline >5× baseline

When a Watch threshold is crossed:

  • Engineer who observes it creates a ticket with capacity label
  • Ticket reviewed in next sprint planning

When an Act threshold is crossed:

  • On-call engineer creates a ticket marked P2
  • Tech lead reviews within 24 hours
  • Action plan documented and scheduled within 1 sprint

When an Emergency threshold is crossed:

  • Treat as a potential incident — page on-call
  • Emergency scaling actions taken immediately (see runbook)
  • Root cause investigation starts within 2 hours

Emergency scaling runbook: [Link to oncall-runbook for capacity incidents]


8. Infrastructure Action Roadmap

Immediate Actions (next 2 weeks)
Action Owner Effort Justification
[e.g. Increase DB connection pool limit to X] [Name] [2 hours] [DB connections at X% — hitting ceiling in X weeks]
[e.g. Enable storage auto-scaling on RDS] [Name] [30 min] [Storage at X% — prevents emergency at X months]
[e.g. Add S3 lifecycle policy for [bucket]] [Name] [1 hour] [Storage growing at $X/month unnecessarily]
This Quarter (within 3 months)
Action Owner Effort Justification
[e.g. Add read replica to production DB] [Name] [1 day] [DB CPU projected to hit 65% in 2 months]
[e.g. Increase max auto-scaling limit from X to Y] [Name] [2 hours] [Current max is too close to expected peak]
[e.g. Configure PgBouncer for connection pooling] [Name] [3 days] [Reduce per-connection overhead; headroom for growth]
Next Quarter (3–6 months)
Action Owner Effort Justification
[e.g. Upgrade DB instance class — [current] → [next]] [Name] [2 hours — blue/green] [DB CPU projected to hit 70% by Q[X]]
[e.g. Implement caching for [high-read endpoint]] [Name] [1 week] [Reduce DB read load by estimated [X%]]
[e.g. Evaluate horizontal DB sharding] [Name] [2 weeks (spike)] [At 12-month projections, single DB hits limits]
Horizon (6–12 months)
Action Description Trigger condition
[e.g. Multi-region deployment] [Active-passive setup in eu-west-2] [DAU exceeds X or SLA requires 99.99%]
[e.g. Database sharding or migration to distributed DB] [Evaluate CockroachDB / Vitess] [Single-node DB projected to hit ceiling]
[e.g. CDN expansion] [Add PoPs in [region]] [Latency SLO breached for [geography]]

Anti-Patterns

  • Do not set capacity trigger thresholds without knowing the baseline — a "CPU > 70%" alert is meaningless if you don't know what normal looks like
  • Do not plan only for average traffic — capacity plans that don't model peak load will result in incidents during the events that matter most
  • Do not conflate vertical and horizontal scaling — adding more app servers without addressing database connection limits will not resolve the constraint
  • Do not present growth projections as certainties — all forecasts have uncertainty; state the confidence level and provide a conservative and optimistic scenario
  • Do not defer action items without a named owner and a specific date — a roadmap with no owners is a wish list

Quality Checks

  • Every resource has a quantified current utilisation and a projected months-to-ceiling — no hand-waving
  • The most critical constraint is called out in the executive summary with a specific timeline
  • Growth projections state their assumptions and confidence level — not presented as certainties
  • Capacity triggers define amber/red thresholds and name who acts at each level
  • Cost projections include unit economics, not just absolute totals
  • The infrastructure roadmap has named owners and effort estimates — not just a wish list
  • Auto-scaling configuration includes both scale-out AND scale-in triggers, and a min/max range
  • Actions are ordered by urgency — immediate items are genuinely immediate, not backlog filler
1---
2name: capacity-planning
3description: "Produce a capacity planning document for a service covering traffic forecasts, resource requirements, and scaling strategy. Use when asked to plan infrastructure capacity, forecast resource needs, model traffic growth, define scaling strategy, or produce a capacity review for a service. Produces a structured capacity plan covering current baseline metrics, growth projections, resource requirements per tier, scaling strategy, cost projections, capacity triggers, and an infrastructure action roadmap."
4---
5 
6# Capacity Planning Skill
7 
8Produce a complete capacity planning document for a service. Capacity planning is not about predicting the future exactly — it is about understanding current headroom, modelling growth, and ensuring the team takes infrastructure action before a constraint becomes an incident.
9 
10A good capacity plan answers: what is running out first, how long before it runs out, what does it cost to fix it, and who decides when to act.
11 
12## Required Inputs
13 
14Ask for these if not already provided:
15- **Service name and description** — what the service does and who depends on it
16- **Current traffic and usage metrics** — requests per second (or per day), active users, data volume — whatever units are most natural for this service
17- **Current resource utilisation** — CPU %, memory %, disk usage, connection pool utilisation, DB query throughput
18- **Growth rate or projections** — historical growth rate, or known upcoming events (product launch, sales cycle, seasonal peak)
19- **Tech stack and infrastructure** — cloud provider, compute type (VMs, containers, serverless), database, caching layer, CDN
20- **Cost constraints** — current infrastructure spend, acceptable cost ceiling, or target cost per unit of traffic
21 
22## Output Format
23 
24---
25 
26# Capacity Plan: [Service Name]
27 
28**Service:** [Name] | **Team:** [Team name]
29**Author:** [Name] | **Last updated:** [Date]
30**Planning horizon:** [12 months — [Month Year] to [Month Year]]
31**Review cadence:** [Quarterly]
32 
33---
34 
35## 1. Executive Summary
36 
37[3–5 sentences covering: current state, the most critical capacity constraint, the timeline before it becomes a risk, the recommended action, and the cost implication. Written for an engineering manager or VP who needs the key facts without reading the full document.]
38 
39**Critical finding:** [e.g. "The database connection pool will reach 90% utilisation within 6 weeks at current growth. Without action, this will cause request queueing and latency spikes under normal traffic."]
40 
41**Recommended immediate action:** [e.g. "Increase connection pool limit and add a read replica within the next 2 weeks."]
42 
43**Estimated cost impact:** [e.g. "Recommended changes add ~$[X]/month to infrastructure spend."]
44 
45---
46 
47## 2. Current Baseline
48 
49*All metrics are 30-day averages unless noted. Date captured: [Date]*
50 
51### Traffic
52 
53| Metric | Value | Peak (7-day) | Notes |
54|---|---|---|---|
55| Requests per second (avg) | [X req/s] | [X req/s] | [Peak time / day of week] |
56| Requests per day | [X M/day] | [X M/day] | — |
57| Active users (DAU/MAU) | [X] / [X] | — | — |
58| [Service-specific metric — e.g. jobs processed/hour] | [X] | [X] | — |
59| [Service-specific metric — e.g. GB ingested/day] | [X GB] | [X GB] | — |
60 
61### Compute
62 
63| Resource | Current utilisation | Instance type | Count | Notes |
64|---|---|---|---|---|
65| CPU (avg) | [X%] | [e.g. c5.2xlarge] | [X] | Peak: [X%] |
66| Memory (avg) | [X%] | — | — | Peak: [X%] |
67| Network egress | [X Mbps] | — | — | — |
68| Container / pod count | [X] | [e.g. 2 vCPU / 4 GB] | — | Auto-scaling range: [X–Y] |
69 
70### Database
71 
72| Resource | Current utilisation | Spec | Notes |
73|---|---|---|---|
74| CPU | [X%] | [e.g. db.r5.2xlarge] | Peak: [X%] |
75| Memory | [X%] | [X GB RAM] | — |
76| Storage used | [X GB] of [Y GB] ([Z%]) | [X GB provisioned] | Growth: [~X GB/month] |
77| IOPS (avg) | [X] of [Y provisioned] | [Y IOPS] | Peak: [X IOPS] |
78| Connection pool | [X] of [Y max] ([Z%]) | Max connections: [Y] | [ORM pool size: X] |
79| Query P99 latency | [X ms] | — | [Slowest query: X] |
80| Read/write ratio | [X%] reads / [Y%] writes | — | — |
81 
82### Cache
83 
84| Resource | Current utilisation | Spec | Notes |
85|---|---|---|---|
86| Memory used | [X GB] of [Y GB] ([Z%]) | [e.g. cache.r6g.large] | Eviction rate: [X%] |
87| Hit rate | [X%] | — | Miss rate: [Y%] |
88| Connections | [X] | Max: [Y] | — |
89 
90### Storage / Object Store
91 
92| Resource | Current usage | Growth rate | Notes |
93|---|---|---|---|
94| [S3 / GCS / Blob] | [X GB / TB] | [~X GB/month] | [Lifecycle policies in place? Y/N] |
95| Disk (if applicable) | [X GB] of [Y GB] | [~X GB/month] | [RAID / EBS type] |
96 
97### Cost Baseline
98 
99| Component | Current monthly cost | % of total |
100|---|---|---|
101| Compute (app servers) | $[X] | [X%] |
102| Database | $[X] | [X%] |
103| Cache | $[X] | [X%] |
104| Storage | $[X] | [X%] |
105| CDN / bandwidth | $[X] | [X%] |
106| Other ([describe]) | $[X] | [X%] |
107| **Total** | **$[X]** | 100% |
108 
109**Unit economics:** $[X] per [1,000 requests / 1,000 users / GB processed]
110 
111---
112 
113## 3. Growth Projections
114 
115### Assumptions
116 
117| Assumption | Value | Source | Confidence |
118|---|---|---|---|
119| Monthly traffic growth rate | [X%] | [Historical trend / product forecast] | [High / Medium / Low] |
120| Seasonal peak factor | [+X% in [month(s)]] | [Last year's data / expected launch] | [High / Medium] |
121| Upcoming events | [e.g. Marketing campaign — [Month], expected +[X]% traffic spike] | [Marketing plan] | [Medium] |
122| User growth | [X new users/month] | [Sales pipeline / growth model] | [Medium] |
123| Data growth | [X GB/month] | [Current trend] | [High] |
124 
125### Traffic Forecast
126 
127| Timeframe | Req/s (avg) | Req/s (peak) | DAU | Data volume (cumulative) |
128|---|---|---|---|---|
129| **Now** (baseline) | [X] | [X] | [X] | [X GB/TB] |
130| **+3 months** | [X] | [X] | [X] | [X GB/TB] |
131| **+6 months** | [X] | [X] | [X] | [X GB/TB] |
132| **+12 months** | [X] | [X] | [X] | [X GB/TB] |
133 
134*Growth formula: [Baseline] × (1 + [monthly rate])^[months] + seasonal adjustment*
135 
136### Capacity Headroom Analysis
137 
138**When does each resource run out at current utilisation and projected growth?**
139 
140| Resource | Current utilisation | Safe ceiling | Headroom remaining | Months to ceiling |
141|---|---|---|---|---|
142| App CPU | [X%] | 70% | [X%] | [X months] |
143| App memory | [X%] | 80% | [X%] | [X months] |
144| DB CPU | [X%] | 70% | [X%] | [X months] |
145| DB storage | [X GB] of [Y GB] | 80% = [Z GB] | [X GB] | [X months] |
146| DB IOPS | [X] of [Y] | 80% = [Z] | [X IOPS] | [X months] |
147| DB connections | [X] of [Y] | 80% = [Z] | [X] | [X months] |
148| Cache memory | [X GB] of [Y GB] | 75% = [Z GB] | [X GB] | [X months] |
149| Storage (object) | [X TB] | No hard limit — cost trigger | — | [Cost trigger: $X/month] |
150 
151**Red flags** (resources hitting ceiling within 3 months):
152- [Resource]: [current]% → ceiling in [X weeks] — **Action required**
153- [Resource]: [current]% → ceiling in [X weeks] — **Action required**
154 
155---
156 
157## 4. Resource Requirements
158 
159### Compute Requirements
160 
161| Timeframe | Required instances | Recommended instance type | Auto-scaling range | Notes |
162|---|---|---|---|---|
163| Now | [X] | [type] | [min: X, max: Y] | Current configuration |
164| +3 months | [X] | [type] | [min: X, max: Y] | [Any instance type change needed?] |
165| +6 months | [X] | [type or upgrade] | [min: X, max: Y] | [Consider [larger type / horizontal scale]] |
166| +12 months | [X] | [type or upgrade] | [min: X, max: Y] | [State of horizontal vs vertical decision] |
167 
168**Memory headroom target:** Maintain ≥30% available memory at average load; ≥20% at peak.
169**CPU headroom target:** Maintain ≥30% available CPU at average load; ≥15% at peak.
170 
171### Database Requirements
172 
173| Timeframe | Instance type | Storage | IOPS | Read replica | Notes |
174|---|---|---|---|---|---|
175| Now | [type] | [X GB] | [X] | [Y/N] | Current |
176| +3 months | [type] | [X GB] | [X] | [Y/N] | [Upgrade storage / IOPS] |
177| +6 months | [type or upgrade] | [X GB] | [X] | **Yes** | [Read replica recommended by this point] |
178| +12 months | [type] | [X GB] | [X] | [X replicas] | [Consider sharding / partitioning at this scale] |
179 
180**Storage growth management:**
181- Current growth: [~X GB/month]
182- Storage auto-scaling: [Enabled / Not enabled — enable by [date]]
183- Archiving policy: [Records older than X months moved to [cold storage / archive tier]]
184 
185### Cache Requirements
186 
187| Timeframe | Node type | Nodes | Memory | Notes |
188|---|---|---|---|---|
189| Now | [type] | [X] | [X GB] | Current |
190| +6 months | [type] | [X] | [X GB] | [Scale out or upgrade] |
191| +12 months | [type] | [X] | [X GB] | [Cluster mode if >Y GB required] |
192 
193---
194 
195## 5. Scaling Strategy
196 
197### Compute — Horizontal Scaling
198 
199**Decision: [Horizontal / Vertical / Both]**
200 
201[State the scaling strategy and the reasoning. E.g. "The application is stateless and CPU-bound; horizontal scaling is preferred. Vertical scaling is a short-term fallback only."]
202 
203**Auto-scaling configuration:**
204 
205```
206Scale-out trigger: CPU > [X%] for [Y minutes] OR memory > [X%] for [Y minutes]
207Scale-in trigger: CPU < [X%] for [Y minutes] AND memory < [X%] for [Y minutes]
208Min instances: [X] (ensures HA across [X] AZs)
209Max instances: [Y] (cost ceiling)
210Cooldown period: [X seconds]
211Warmup time: [X seconds] (time for new instance to be healthy)
212```
213 
214**Limits of horizontal scaling:**
215- [e.g. Database connection pool is the current bottleneck — adding more app instances without increasing DB connections will not help]
216- [e.g. Session affinity required for WebSocket connections — limits pure stateless scaling]
217 
218### Database — Read Scaling
219 
220**Strategy:** [Read replica / Connection pooling via PgBouncer / Query caching / None needed yet]
221 
222**When to add a read replica:**
223- DB CPU sustained >60% for >30 minutes, OR
224- Read query P95 latency >50ms, OR
225- Connection pool utilisation >70%
226 
227**Connection pooling:**
228- Pooler: [PgBouncer / RDS Proxy / application-level / not configured]
229- Pool size: [X connections per app instance × Y instances = Z total]
230- Max DB connections: [configured to Z + 20% headroom]
231 
232### Caching Strategy
233 
234**Cache policy:** [Cache-aside / Write-through / Write-behind]
235**TTL strategy:**
236 
237| Data type | TTL | Invalidation method |
238|---|---|---|
239| [e.g. User profile] | [5 minutes] | [Explicit invalidation on update] |
240| [e.g. Product catalog] | [1 hour] | [TTL expiry — eventual consistency acceptable] |
241| [e.g. Session data] | [24 hours] | [Explicit invalidation on logout] |
242 
243**Cache miss handling:** [Describe what happens on a cache miss — does it fall through gracefully or cause a thundering herd risk?]
244 
245---
246 
247## 6. Cost Projections
248 
249### Infrastructure Cost Forecast
250 
251| Component | Now (monthly) | +3 months | +6 months | +12 months |
252|---|---|---|---|---|
253| Compute | $[X] | $[X] | $[X] | $[X] |
254| Database | $[X] | $[X] | $[X] | $[X] |
255| Cache | $[X] | $[X] | $[X] | $[X] |
256| Storage | $[X] | $[X] | $[X] | $[X] |
257| CDN / bandwidth | $[X] | $[X] | $[X] | $[X] |
258| **Total** | **$[X]** | **$[X]** | **$[X]** | **$[X]** |
259| MoM growth % | — | [X%] | [X%] | [X%] |
260 
261**Unit economics trend:**
262 
263| Timeframe | Cost per 1k requests | Cost per user/month | Notes |
264|---|---|---|---|
265| Now | $[X] | $[X] | Baseline |
266| +6 months | $[X] | $[X] | [Improving / worsening — why] |
267| +12 months | $[X] | $[X] | [Target: $X per 1k requests] |
268 
269**Cost optimisation opportunities:**
270 
271| Opportunity | Estimated saving | Effort | Timeline |
272|---|---|---|---|
273| [e.g. Reserved instances for baseline compute] | $[X/month] | Low | Immediate |
274| [e.g. S3 lifecycle policy — move objects >90 days to Glacier] | $[X/month] | Low | This sprint |
275| [e.g. Right-size [instance] — current is overprovisioned] | $[X/month] | Low | This sprint |
276| [e.g. Optimise top-5 slow queries — reduce DB compute need] | $[X/month] | Medium | Next quarter |
277 
278---
279 
280## 7. Capacity Triggers and Actions
281 
282Define the thresholds that require explicit action — not retrospective fixes after an incident.
283 
284| Resource | Watch (amber) | Act (red — schedule work) | Emergency (incident risk) |
285|---|---|---|---|
286| App CPU (sustained avg) | >60% | >70% | >85% |
287| App memory | >70% | >80% | >90% |
288| DB CPU | >55% | >65% | >80% |
289| DB storage | >65% | >75% | >85% |
290| DB connections | >60% | >70% | >85% |
291| Cache memory / eviction | Hit rate <90% | Hit rate <85% | Hit rate <75% |
292| Error rate | >0.5% | >1% | >2% |
293| P99 latency | >2× baseline | >3× baseline | >5× baseline |
294 
295**When a Watch threshold is crossed:**
296- Engineer who observes it creates a ticket with capacity label
297- Ticket reviewed in next sprint planning
298 
299**When an Act threshold is crossed:**
300- On-call engineer creates a ticket marked P2
301- Tech lead reviews within 24 hours
302- Action plan documented and scheduled within 1 sprint
303 
304**When an Emergency threshold is crossed:**
305- Treat as a potential incident — page on-call
306- Emergency scaling actions taken immediately (see runbook)
307- Root cause investigation starts within 2 hours
308 
309**Emergency scaling runbook:** [Link to oncall-runbook for capacity incidents]
310 
311---
312 
313## 8. Infrastructure Action Roadmap
314 
315### Immediate Actions (next 2 weeks)
316 
317| Action | Owner | Effort | Justification |
318|---|---|---|---|
319| [e.g. Increase DB connection pool limit to X] | [Name] | [2 hours] | [DB connections at X% — hitting ceiling in X weeks] |
320| [e.g. Enable storage auto-scaling on RDS] | [Name] | [30 min] | [Storage at X% — prevents emergency at X months] |
321| [e.g. Add S3 lifecycle policy for [bucket]] | [Name] | [1 hour] | [Storage growing at $X/month unnecessarily] |
322 
323### This Quarter (within 3 months)
324 
325| Action | Owner | Effort | Justification |
326|---|---|---|---|
327| [e.g. Add read replica to production DB] | [Name] | [1 day] | [DB CPU projected to hit 65% in 2 months] |
328| [e.g. Increase max auto-scaling limit from X to Y] | [Name] | [2 hours] | [Current max is too close to expected peak] |
329| [e.g. Configure PgBouncer for connection pooling] | [Name] | [3 days] | [Reduce per-connection overhead; headroom for growth] |
330 
331### Next Quarter (3–6 months)
332 
333| Action | Owner | Effort | Justification |
334|---|---|---|---|
335| [e.g. Upgrade DB instance class — [current] → [next]] | [Name] | [2 hours — blue/green] | [DB CPU projected to hit 70% by Q[X]] |
336| [e.g. Implement caching for [high-read endpoint]] | [Name] | [1 week] | [Reduce DB read load by estimated [X%]] |
337| [e.g. Evaluate horizontal DB sharding] | [Name] | [2 weeks (spike)] | [At 12-month projections, single DB hits limits] |
338 
339### Horizon (6–12 months)
340 
341| Action | Description | Trigger condition |
342|---|---|---|
343| [e.g. Multi-region deployment] | [Active-passive setup in eu-west-2] | [DAU exceeds X or SLA requires 99.99%] |
344| [e.g. Database sharding or migration to distributed DB] | [Evaluate CockroachDB / Vitess] | [Single-node DB projected to hit ceiling] |
345| [e.g. CDN expansion] | [Add PoPs in [region]] | [Latency SLO breached for [geography]] |
346 
347---
348 
349## Anti-Patterns
350 
351- [ ] Do not set capacity trigger thresholds without knowing the baseline — a "CPU > 70%" alert is meaningless if you don't know what normal looks like
352- [ ] Do not plan only for average traffic — capacity plans that don't model peak load will result in incidents during the events that matter most
353- [ ] Do not conflate vertical and horizontal scaling — adding more app servers without addressing database connection limits will not resolve the constraint
354- [ ] Do not present growth projections as certainties — all forecasts have uncertainty; state the confidence level and provide a conservative and optimistic scenario
355- [ ] Do not defer action items without a named owner and a specific date — a roadmap with no owners is a wish list
356 
357## Quality Checks
358 
359- [ ] Every resource has a quantified current utilisation and a projected months-to-ceiling — no hand-waving
360- [ ] The most critical constraint is called out in the executive summary with a specific timeline
361- [ ] Growth projections state their assumptions and confidence level — not presented as certainties
362- [ ] Capacity triggers define amber/red thresholds and name who acts at each level
363- [ ] Cost projections include unit economics, not just absolute totals
364- [ ] The infrastructure roadmap has named owners and effort estimates — not just a wish list
365- [ ] Auto-scaling configuration includes both scale-out AND scale-in triggers, and a min/max range
366- [ ] Actions are ordered by urgency — immediate items are genuinely immediate, not backlog filler
367 

Discussion

Alternatives

Also in Roadmap & prioritiesSee all 277 in Product →