# Coverage target worksheet — what % of spend to commit

A 1-page worksheet to pick a coverage % from your own data. Run this before
opening the [Savings Plans calculator](/tools/aws-savings-plans-calculator/) so
you arrive at it with a target, not a guess.

---

## Inputs you need

Pull these from Cost Explorer (or your FinOps tool) using a 90-day window:

1. **On-demand monthly compute spend** (EC2 + Fargate + Lambda + SageMaker). Call this `S`.
2. **24-hour average vs peak hour** in usage units (vCPU-hours or NormalisedUnits): `B = trough`, `P = peak`. Compute `B/P`.
3. **Weekly low (typically Sun 03:00 UTC) vs weekly high**: `W_low`, `W_high`. Compute `W_low / W_high`.
4. **Projected change in the next 12 months** as a percentage: `growth`. Negative if shrinking.
5. **Existing commit utilisation** for any current SP/RI: `U` (0–1). If `U < 0.95`, you are already over-committed; lower the new commitment target.

---

## Step 1 — Baseline ratio

`baseline_ratio = (W_low / W_high) × (B / P)`

This is a conservative floor — the spend that exists in *both* a daily trough
and a weekly low. Commit at most up to this floor without leaving headroom for
on-demand recovery.

| baseline_ratio | Shape | Starting coverage target |
| --- | --- | --- |
| ≥ 0.85 | Very flat (multi-tenant SaaS at scale, batch jobs, ML training rotation) | 75–85% of `S` |
| 0.65–0.85 | Standard SaaS; B2B with light overnight | 65–75% of `S` |
| 0.40–0.65 | B2B 9-to-5, weekly batch, education | 50–65% of `S` |
| < 0.40 | Event-driven, weekend-spiky | ≤ 40% of `S`, or skip commit entirely |

---

## Step 2 — Growth adjustment

Adjust the target by your projected growth (or shrink):

`adjusted_target = starting_target × (1 + growth)` but bounded by `[0, S]`.

Examples:

- Starting target 70% of `S`, projected `growth = +25%` → adjusted target `≈ 87.5%`. Cap at 85% to leave headroom for on-demand burst.
- Starting target 70% of `S`, projected `growth = −15%` → adjusted target `≈ 59.5%`. Round to 60%. The shrink protects against over-commit if a customer churns.

---

## Step 3 — Term and product

| If… | Then… |
| --- | --- |
| `adjusted_target × 12 months × on-demand rate × 0.20 ≥ $25k/yr` | A Savings Plan is worth the procurement effort. Below this, the discount may not pay for the analysis time. |
| Workload survival horizon < 22 months | 1-year No Upfront only. |
| Workload survival horizon ≥ 22 months **and** finance can prepay | 3-year All Upfront — but only if instance family is settled. |
| Workload spans EC2 + Fargate + Lambda + SageMaker | Compute Savings Plan. Always. |
| Workload pinned to a single region + family with no migration plan in term | EC2 Instance SP **only if** you can name the family today. |
| Workload is RDS / ElastiCache / Redshift / OpenSearch | Reserved Instance — Savings Plans do not apply. |
| Workload mixes x86 today + Graviton next year | Compute Savings Plan or wait. **Not** a Standard RI. |

---

## Step 4 — Over-commit recovery plan (write it before you sign)

Every commitment needs a written recovery plan in case usage drops:

- **If utilisation falls below 90% for 30 days:** action = move a non-committed workload onto the same product (e.g. shift a dev account's EC2 to the same family/region to absorb commit).
- **If utilisation falls below 75% for 30 days:** action = for RIs, list on the Marketplace (Standard RI) or exchange (Convertible RI). For Savings Plans, accept the loss and adjust the next commitment cycle — SPs cannot be cancelled or sold.
- **If a major workload migration is announced:** action = freeze new commits 90 days before the migration date; re-baseline 30 days after.

---

## Quick sanity check before signing

- [ ] Coverage target is **at most** `baseline_ratio × S × (1 + growth)`.
- [ ] Product matches the spend (Compute SP for compute; RI for stateful data).
- [ ] Term reflects workload survival horizon (`≥ 22 months` for 3-year All Upfront).
- [ ] Existing commitment utilisation `U ≥ 0.95` (otherwise lower the new target).
- [ ] Over-commit recovery plan is written and shared with FinOps + finance.
- [ ] The 3-year cash outlay does not breach any banking or runway covenant.

If you cannot tick all six, drop the term to 1 year or the coverage by 10
percentage points and re-check.
