Capacity Plan Template
Capacity plan: demand forecast with growth model, utilisation, headroom policy, resource models, bottlenecks, scaling, lead times, cost
Як використовувати: Use it each quarter or before a major launch to make sure capacity arrives before demand does. Start from at least 90 days of measured peak utilisation, then build the forecast and resource models. The main pitfall is planning for averages instead of peaks and failure-domain loss.
Перегляд
Capacity Plan: [Service or platform name] [Planning period]
Complete capacity plan for one or more production services: demand forecast, current utilisation, headroom policy, resource models, bottlenecks, scaling plan, procurement, cost and risks. Based on common site reliability engineering practice. Replace every
[bracketed]value and every row marked Example.
Document control
| Field | Value |
|---|---|
| Document ID | [CAP-SERVICE-2026Q4] |
| Services covered | [Service names or "see 2"] |
| Planning period | [YYYY-MM-DD to YYYY-MM-DD] |
| Data cut-off | YYYY-MM-DD |
| Version | [0.1] |
| Status | [Draft / In review / Approved / Superseded] |
| Owner | [@capacity-owner] |
| Classification | [Internal] |
| Related documents | [SLO document], [System design], [Budget], [Previous capacity plan] |
Approvals
| Role | Name | Decision | Date |
|---|---|---|---|
| Service owner | [@name] | [Approved / Changes requested] | YYYY-MM-DD |
| SRE lead | [@name] | [Decision] | YYYY-MM-DD |
| Finance / FinOps | [@name] | [Decision] | YYYY-MM-DD |
| Product lead | [@name] | [Decision] | YYYY-MM-DD |
Revision history
| Version | Date | Author | Change summary |
|---|---|---|---|
| 0.1 | YYYY-MM-DD | [@name] | Initial draft from Q3 telemetry |
| 0.2 | YYYY-MM-DD | [@name] | Example: Raised growth rate from 4% to 6% per month after marketing launch confirmed |
| 1.0 | YYYY-MM-DD | [@name] | Example: Approved with budget for 12 additional nodes |
Contents
1. Summary
[Summarise in four to six sentences. Example: "Peak request rate is forecast to grow from 4,200 to 7,500 requests per second by the end of Q2. At current efficiency the database tier exhausts its CPU headroom in week 14. We propose moving to a larger instance class in week 10 and adding two read replicas, at an incremental cost of [amount] per month. All other tiers have headroom until at least Q3."]
1.1 Key decisions requested
| ID | Decision | Recommended option | Deadline | Section |
|---|---|---|---|---|
| CD-01 | Example: Approve database instance upgrade | Upgrade in week 10 | YYYY-MM-DD | 8.2 |
| CD-02 | Example: Commit to 1-year reservation for web tier | Commit 60% of baseline | YYYY-MM-DD | 10.2 |
| [CD-nn] | [Decision] | [Option] | YYYY-MM-DD | [Section] |
2. Services in scope
| Service | Owner | Demand driver | Unit | SLO reference | Notes |
|---|---|---|---|---|---|
| Example: Checkout API | [@team] | Orders placed | requests/s | SLO-CHK-01 | Peak in evening hours |
| Example: Orders database | [@team] | Writes from checkout, reads from API | transactions/s | SLO-DB-01 | Single primary |
| Example: Event stream | [@team] | Order and click events | messages/s | SLO-EVT-01 | Shared with analytics |
| [Service] | [@team] | [Driver] | [Unit] | [SLO-ID] | [Notes] |
Out of scope: [list services excluded and the reason, for example "batch reporting cluster, covered by the data platform plan"].
3. Demand forecast
3.1 Baseline demand
| Metric | Value | Measured over | Source |
|---|---|---|---|
| Peak requests per second (p99 of daily peaks) | Example: 4,200 | Last 90 days | [Dashboard link] |
| Average requests per second | Example: 1,350 | Last 90 days | [Dashboard link] |
| Peak-to-average ratio | Example: 3.1 | Last 90 days | Derived |
| Active users (monthly) | Example: 1.8 M | Last full month | [Product analytics] |
| [Metric] | [Value] | [Window] | [Source] |
3.2 Growth model
Organic growth is modelled as compound growth per period:
where is baseline peak demand, is growth per period and is the number of periods. Example: with req/s and per month, demand after 12 months is req/s.
Known events are added as multiplicative uplifts on the affected periods:
where is the expected uplift of event active in period .
3.3 Planned events
| Event | Period | Expected uplift | Confidence | Source |
|---|---|---|---|---|
| Example: Annual sale | Week 47 | +120% for 3 days | Medium | Marketing calendar |
| Example: New market launch | Month 4 onwards | +15% permanent | Low | Product roadmap |
| [Event] | [Period] | [Uplift] | [High / Medium / Low] | [Source] |
3.4 Forecast table
| Period | Organic demand | Event uplift | Planned peak | Low scenario | High scenario |
|---|---|---|---|---|---|
| Example: Month 1 | 4,410 | 0% | 4,410 | 4,300 | 4,550 |
| Example: Month 6 | 5,630 | 15% | 6,470 | 5,900 | 7,200 |
| Example: Month 12 | 7,540 | 15% | 8,670 | 7,400 | 10,100 |
| [Period] | [Value] | [%] | [Value] | [Value] | [Value] |
[Explain how the low and high scenarios were produced, for example by varying between 3% and 7% per month.]
4. Current utilisation
| Tier | Resource | Provisioned | Peak used | Peak utilisation | Limit type | Trend (90 days) |
|---|---|---|---|---|---|---|
| Example: Web | CPU | 40 vCPU | 22 vCPU | 55% | Soft (autoscale) | +4% per month |
| Example: Web | Memory | 160 GiB | 70 GiB | 44% | Hard | Flat |
| Example: Database | CPU | 32 vCPU | 22 vCPU | 69% | Hard (single primary) | +6% per month |
| Example: Database | Storage | 2 TiB | 1.3 TiB | 65% | Hard | +45 GiB per month |
| Example: Database | Connections | 1,000 | 610 | 61% | Hard | +3% per month |
| Example: Event stream | Partition throughput | 48 MB/s | 19 MB/s | 40% | Soft | +5% per month |
| [Tier] | [Resource] | [Amount] | [Amount] | [%] | [Hard / Soft] | [Trend] |
Quotas and provider limits that apply: [list account quotas, API rate limits and licence caps with their current usage].
5. Headroom policy
Each tier keeps enough spare capacity to absorb a traffic spike and the loss of one failure domain while new capacity is added. The maximum planned utilisation for a tier is:
where is the number of failure domains (for example zones), the number of domains that may fail at once, and the spike allowance. Example: , , gives .
| Tier | Failure domains | Tolerated failures | Spike allowance | Action threshold | |
|---|---|---|---|---|---|
| Example: Web | 3 zones | 1 | 20% | 56% | Scale at 50% sustained 15 min |
| Example: Database | 1 primary | 0 (failover to replica) | 30% | 77% | Plan upgrade at 65% peak |
| [Tier] | [N] | [F] | [s] | [%] | [Threshold] |
6. Resource models per tier
6.1 Web tier
Instances required at peak:
where is the measured sustainable throughput of one instance. Example: req/s (load test LT-12), req/s, gives instances.
6.2 Database tier
| Resource | Per-unit cost | Model | Value at month 12 peak |
|---|---|---|---|
| CPU | Example: 11 ms CPU per transaction (measured: 22 vCPU at 2,000 tps) | 4,100 tps x 11 / 1000 / 0.77 = 59 vCPU, so the 64 vCPU class is needed | |
| Storage | Example: 45 GiB growth per month | 1.3 + 0.54 = 1.84 TiB | |
| Connections | Example: 0.145 per req/s | 1,257 (exceeds 1,000 limit) | |
| [Resource] | [Cost] | [Model] | [Value] |
6.3 [Other tier]
[Repeat for each tier: caches, queues, storage, third-party APIs and licences. Note which models were validated by a load test and when.]
7. Bottleneck analysis
Time to exhaustion for a resource growing at rate per period from utilisation to threshold :
Example: database CPU at , , per month gives months.
| Rank | Resource | Current | Threshold | Time to exhaustion | Scalable how | Lead time |
|---|---|---|---|---|---|---|
| 1 | Example: Database CPU | 69% | 77% | 1.9 months | Vertical only | 2 weeks |
| 2 | Example: Database connections | 61% | 90% | 13.2 months | Pooler | 1 week |
| 3 | Example: Web CPU | 55% | 56% | Now at threshold | Horizontal, automatic | Minutes |
| [n] | [Resource] | [%] | [%] | [Time] | [How] | [Time] |
The dependency diagram shows where saturation in one tier propagates.
8. Scaling plan
8.1 Automatic scaling
| Tier | Mechanism | Metric | Scale-out trigger | Scale-in trigger | Min / max |
|---|---|---|---|---|---|
| Example: Web | Horizontal autoscaler | CPU | > 50% for 5 min | < 30% for 20 min | 12 / 60 |
| Example: Event consumers | Queue-based scaler | Consumer lag | > 10,000 messages | < 1,000 messages | 4 / 32 |
| [Tier] | [Mechanism] | [Metric] | [Trigger] | [Trigger] | [Min / Max] |
8.2 Planned scaling actions
| ID | Action | Type | Trigger or date | Owner | Complete by | Status |
|---|---|---|---|---|---|---|
| SC-01 | Example: Move database to next instance class (32 to 64 vCPU) | Vertical | Week 10 or CPU peak > 72% | [@name] | YYYY-MM-DD | [Planned] |
| SC-02 | Example: Add connection pooler in front of database | Architectural | Before connections > 800 | [@name] | YYYY-MM-DD | [Planned] |
| SC-03 | Example: Raise web autoscaler max from 60 to 80 | Horizontal | Before annual sale | [@name] | YYYY-MM-DD | [Planned] |
| [SC-nn] | [Action] | [Horizontal / Vertical / Architectural] | [Trigger] | [@name] | YYYY-MM-DD | [Status] |
8.3 Efficiency improvements
[List optimisations that reduce per-unit cost, with the expected effect on the models in section 6. Example: "Caching product lookups is expected to cut database reads by 35%, reducing CPU per transaction from 11 ms to 8 ms."]
9. Procurement and lead times
| Item | Quantity | Supplier / provider | Lead time | Order by | Approval needed | Status |
|---|---|---|---|---|---|---|
| Example: Regional vCPU quota increase | +200 vCPU | [Cloud provider] | 5 working days | YYYY-MM-DD | SRE lead | [Requested] |
| Example: Database licence tier upgrade | 1 | [Vendor] | 3 weeks | YYYY-MM-DD | Finance | [Not started] |
| Example: On-premises storage shelf | 2 | [Vendor] | 8 weeks | YYYY-MM-DD | CTO | [Not started] |
| [Item] | [Qty] | [Supplier] | [Time] | YYYY-MM-DD | [Role] | [Status] |
The latest order date for an item is:
where is the lead time and a safety buffer for installation and testing.
10. Cost projection
10.1 Projected cost
| Period | Web | Database | Event stream | Storage | Total | Cost per 1,000 requests |
|---|---|---|---|---|---|---|
| Example: Current | [Amount] | [Amount] | [Amount] | [Amount] | [Amount] | [Amount] |
| Example: Month 6 | [Amount] | [Amount] | [Amount] | [Amount] | [Amount] | [Amount] |
| Example: Month 12 | [Amount] | [Amount] | [Amount] | [Amount] | [Amount] | [Amount] |
Unit cost is computed as:
10.2 Commitments and purchasing options
[Describe which baseline capacity will be covered by reservations or committed-use discounts, and which remains on demand. Example: "Commit 60% of the month-6 web baseline for one year; keep spikes on demand."]
11. Risks and assumptions
11.1 Assumptions
- Example: Request mix stays within 5% of the current read/write ratio.
- Example: No change in client retry behaviour.
- [Assumption]
11.2 Risks
| ID | Risk | Likelihood | Impact | Mitigation | Owner |
|---|---|---|---|---|---|
| CR-01 | Example: Growth exceeds high scenario after viral campaign | Low | High | Autoscaler max raised; database upgrade pre-approved | [@name] |
| CR-02 | Example: Provider has no capacity for larger instance class in region | Medium | High | Reserve capacity in advance; test alternate class | [@name] |
| CR-03 | Example: New feature doubles per-request database cost | Medium | Medium | Capacity review in design checklist | [@name] |
| [CR-nn] | [Risk] | [L / M / H] | [L / M / H] | [Mitigation] | [@name] |
12. Review cadence and accuracy tracking
| Review | Frequency | Participants | Inputs | Output |
|---|---|---|---|---|
| Utilisation check | Weekly | SRE on duty | Dashboards | Exceptions raised |
| Plan review | Monthly | Service owners, SRE, FinOps | Forecast vs actual | Updated actions in 8.2 |
| Full replan | Quarterly | All approvers | New telemetry, roadmap | New version of this document |
Forecast error for each period is tracked as:
| Period | Forecast peak | Actual peak | Error | Comment |
|---|---|---|---|---|
| Example: Month 1 | 4,410 | 4,620 | +4.8% | Campaign started early |
| [Period] | [Value] | [Value] | [%] | [Comment] |
13. Appendices
13.1 Load test evidence
| Test ID | Date | Tier | Result | Report |
|---|---|---|---|---|
| LT-12 | YYYY-MM-DD | Example: Web | 350 req/s per instance at p99 < 250 ms | [Link] |
| [LT-nn] | YYYY-MM-DD | [Tier] | [Result] | [Link] |
13.2 Data sources
[List the dashboards, queries and exports used, with time ranges, so the next planner can reproduce the numbers.]
13.3 Glossary
| Term | Meaning |
|---|---|
| Headroom | Spare capacity kept above planned peak |
| Failure domain | A unit that can fail independently, such as a zone or rack |
| Time to exhaustion | Time until a resource reaches its threshold at the forecast growth rate |
| Unit cost | Cost divided by units of demand served |
Standard and licence note
Based on common site reliability engineering and IT capacity management practice for demand forecasting, headroom and scaling plans. Original text written for this collection; example numbers are illustrative. Template licence: MIT.
Схожі шаблони
IT Disaster Recovery Plan Template (NIST SP 800-34)
IT disaster recovery plan: roles, contact tree, BIA with RTO/RPO/MTD, activation flow, recovery procedures, reconstitution, exercises
ОпераціїError Budget Policy Template
Error budget policy: SLOs covered, budget and burn-rate maths, thresholds, feature freeze, escalation, exceptions, sign-off
ОпераціїCloud Cost Review Template (FinOps)
Cloud cost review by FinOps phase: spend by service and team, unit economics, anomalies, savings, commitments, tagging, actions