Case study — multi-region SaaS
They bought 550 reservations in twelve years.
Here's the $60k that still got away.
A real production account: a B2B SaaS platform running database-per-tenant across six AWS regions. We analyzed its entire reservation ledger, usage history, and CloudTrail. Every number below is measured, and priced at the rates this account actually pays. This is what manual reservation management costs a team that is genuinely good at it.
Finding 01 — the review-cycle tax
Reservations expire weekly. Humans buy monthly.
With 550 one-year reservations, something expires almost every week. But the purchase timestamps tell you how the work actually happens: every reservation bought in the last two years landed on just 27 distinct days. That's a person running a batch review every month or two — and between reviews, expired coverage just sits there, billing at on-demand.
Worst single case: a db.m6g.4xlarge reservation expired in August 2024 and wasn't re-bought until the following June —309 days of a 4xlarge running at on-demand, $2,129 of premium on one instance, invisible inside a coverage number that still said “~90%, healthy.” Reserver's renewal autopilot re-prices and repurchases the day a term ends. This entire category goes to zero.
Finding 02 — the migration nobody told the renewals about
The fleet moved on. The renewal habit kept buying the old one.
In May 2026 the team executed a clean, well-planned generation migration — CloudTrail shows dozens of old instances deleted over three weeks, each replaced by a newer-generation sibling, and the burstable t4g replica tier retired entirely. The problem: while that migration was being planned, the routine renewal cycle was still re-committing to the outgoing tier — four renewal rounds, ~35 one-year reservations on hardware with weeks to live.
The other half of the same event: the replacement m8g/m7g fleet came up mid-May, and its reservations arrived July 5 — the next scheduled review. June's on-demand premium tripled to $2,992 in a single month. A calendar-driven renewal process and a migration project don't share state. A daily fleet scan is the shared state: expiring RIs whose instances are gone get flagged, not renewed — and the new fleet trips the age rule instead of waiting for a human to notice it.
Finding 03 — drift between reviews
Coverage doesn't fail loudly. It slides.
New tenant databases appear continuously in this account. Each one runs at on-demand until a human notices it at the next review. One instance at a time, that's invisible — until you plot it.
At scan time, 11 of the 12 uncovered RDS instances were older than 30 days — one 4xlarge had been running on-demand for 171 days. Under Reserver's age rule (“running longer than 30 days → reserve it”), every one is ticketed months earlier. Measured over the full year at their own realized rates: $10,004 in RDS, $1,343 in ElastiCache — same signature, smaller numbers: 13 of 65 cache nodes uncovered.
Finding 04 — the seam between two owners
Two teams manage commitments. The steadiest workload fell between them.
RDS and ElastiCache reservations are managed inside this account; EC2 commitments are handled at the payer level with org-wide Savings Plans. Both layers do their jobs — the org sweeps the Linux fleet, and the account team moved half its EC2 to Spot. But look at what's left after both nets have passed over the account:
Too Windows-shaped for the Spot program; invisible to the org-level Savings Plan sizing. $5,470/yr, priced by AWS's own Cost Explorer recommendation — not ours. Split ownership creates seams, and steady workloads leak through them. A scanner that reads this account's actual running fleet surfaces the miss no matter whose job the purchase was.
Finding 05 — the twelve-year habit
550 reservations. Zero three-year terms. Their own ledger says that's backwards.
Every reservation this team bought since 2014 is a 1-year term. The instinct — “our fleet changes too much to commit for three years” — is reasonable. It's also refuted by their own purchase history: every instance family they ever adopted stayed in the fleet 3.7 to 5.4 years. A 3-year term bought at family adoption would never have stranded. Not once, in twelve years.
Instance-family tenure, from their own RI ledger
the first 3 years — a 3-yr term bought at adoption runs to completion in every case
Two honest nuances a recommender must carry — and a spreadsheet doesn't: AWS doesn't offer 3-year terms on this account's newest class yet (db.m8g is 1-year only today), and a 3-year t4g bought in early 2026 would have stranded in the May migration. The policy isn't “always 3-year” — it's 3-year at family adoption, taper as the family ages past the org's own tenure norm. That's a judgment Reserver prices instance-by-instance, because the evidence (this account's twelve-year ledger) is already in the scan. Counting only the airtight segments: $28,120/yr. Across the portfolio as generations roll: up to $95,616/yr.
The bill
≈$60,000 a year, on an account doing almost everything right.
And it's live, not historical: at scan time the account carried $976/month of uncovered-instance premium, $7,512 of committed stranded-RI spend, and 57 reservation units — $9,554/month of coverage — expiring in the next 120 days, heading into exactly the manual review cycle that produced every number above.
Method notes — for the skeptical reader (we hope that's you)
- Every dollar figure is computed from the account's own data: 550 RI purchase records (2014–2026), Cost Explorer usage at usage-type granularity, CloudTrail instance lifecycle events, and a live scan of the running fleet.
- Lapse gaps are costed at (their realized on-demand rate − their own amortized RI rate) per class and region — never list-price discounts.
- Stranded-reservation burn is measured against actual metered usage hours, not fleet snapshots — a reservation counts as wasted only in months where RI-hours exceeded metered instance-hours for its class, with AWS size-flexibility normalization applied within each family first. Committed forward burn strands the cheapest reservations first (the conservative choice). The May 2026 migration was verified in CloudTrail, not inferred.
- The EC2 and ElastiCache figures are AWS's own Cost Explorer purchase recommendations on a 60-day lookback. EC2 was cross-checked from the payer account: the residual Windows floor is net of everything org-level Savings Plans cover.
- Term figures use live reservation-offering prices for the exact classes, regions, and engine, compared at amortized effective $/hr. Family tenure comes from the account's own ledger. The headline counts only newly adopted or demonstrably stable segments; the full-portfolio number is labeled as the ceiling.
- Savings requiring workload changes, Spot migration, or right-sizing are excluded. Everything above is pure purchasing mechanics on the fleet exactly as it ran.
Stop overpaying for a steady fleet.
Reserver is in early access. Join the list and we'll onboard you as capacity opens up — first recommendation within minutes of connecting.