Case study: multi-region SaaS
They bought 550 reservations in twelve years.
The $60k that still got away.
This is a real production account. It runs a B2B SaaS platform with one database per tenant across six AWS regions. We analyzed its whole reservation ledger, usage history, and CloudTrail. We measured every number below and priced it at the rates this account pays. This is what manual reservation management costs a team that is 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. The purchase timestamps show how the work happens. Every reservation bought in the last two years landed on just 27 distinct days. A person runs a batch review every month or two. Between reviews, expired coverage bills at on-demand.
The worst case is a db.m6g.4xlarge reservation that expired in August 2024. The team re-bought it the following June. That gap is 309 days at on-demand, with $2,129 of premium on one instance. The coverage number still said “~90%, healthy.” That is $0.29 an hour and $6.89 a day. Autopilot costs $1,788 a year, which is $4.90 a day. One lapsed day on one instance cost more than a day of Autopilot. Reserver's expiry radar flags the end date before the term runs out, so you can renew on time. Renewal autopilot is on the roadmap and is not built yet.
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 ran a clean, well-planned generation migration. CloudTrail shows dozens of old instances deleted over three weeks. Each one got a newer-generation replacement. The team retired the burstable t4g replica tier entirely. But during the planning, the routine renewal cycle kept committing to the outgoing tier. It ran four renewal rounds and bought about 35 one-year reservations on hardware with weeks to live.
The same event had a second effect. The replacement m8g/m7g fleet came up mid-May. Its reservations arrived July 5, at 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 do not share state. A daily fleet scan gives them shared state. It flags expiring RIs whose instances are gone, so nobody renews them. The first scan lists the new fleet as uncovered, so nobody has to notice it by hand. An age rule is on the roadmap.
Finding 03: drift between reviews
Coverage doesn't fail loudly. It slides.
New tenant databases appear all the time in this account. Each one runs at on-demand until a person notices it at the next review. One instance at a time, the cost is invisible. A chart makes it visible.
At scan time, 11 of the 12 uncovered RDS instances were older than 30 days. One 4xlarge had run on-demand for 171 days. Reserver's purchase recommendations list every uncovered instance from the first scan, months earlier. An age rule (“running longer than 30 days, so reserve it”) is on the roadmap. We measured the full year at their own realized rates. The premium was $10,004 in RDS and $1,343 in ElastiCache. ElastiCache shows the same pattern at smaller numbers, with 13 of 65 cache nodes uncovered.
Finding 04: the seam between two owners
Two teams manage commitments. The steadiest workload fell between them.
The account team manages RDS and ElastiCache reservations. The payer level handles EC2 commitments with org-wide Savings Plans. Both layers do their jobs. The org covers the Linux fleet, and the account team moved half its EC2 to Spot. Now look at what is left after both layers have run:
The Spot program cannot take these Windows instances. The org-level Savings Plan sizing does not see them. They cost $5,470/yr, priced by AWS's own Cost Explorer recommendation, not ours. Split ownership creates gaps, and steady workloads leak through them. A scanner that reads this account's actual running fleet finds the miss, whoever owned the purchase.
Finding 05: the twelve-year habit
550 reservations. Zero three-year terms. Their own ledger says that is backwards.
Every reservation this team bought since 2014 is a 1-year term. The team thinks its fleet changes too much to commit for three years. Its own purchase history disagrees. Every instance family it ever adopted stayed in the fleet for 3.7 to 5.4 years. A 3-year term bought at family adoption would never have stranded, 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
A recommender must carry two caveats that a spreadsheet misses. First, AWS does not offer 3-year terms on this account's newest class yet (db.m8g is 1-year only today). Second, a 3-year t4g bought in early 2026 would have stranded in the May migration. The better policy is 3 years at family adoption, then shorter terms as the family ages past the org's tenure norm. Reserver prices that choice instance by instance, because the account's twelve-year ledger is already in the scan. The airtight segments alone save $28,120/yr. The full portfolio, as generations roll, saves up to $95,616/yr.
The bill
≈$60,000 a year, on an account doing almost everything right.
The problem is still open. At scan time the account carried $976/month of uncovered-instance premium and $7,512 of committed stranded-RI spend. It also had 57 reservation units ($9,554/month of coverage) expiring in the next 120 days. They head into the same manual review cycle that produced every number above.
Method notes, for the skeptical reader (we hope that's you)
- We computed every dollar figure from the account's own data. The sources are 550 RI purchase records (2014–2026) and Cost Explorer usage by usage type. They also include CloudTrail lifecycle events and a live fleet scan.
- We costed lapse gaps at their realized on-demand rate minus their own amortized RI rate, per class and region. We never used list-price discounts.
- We measured stranded-reservation burn 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. We first applied AWS size-flexibility normalization within each family. Committed forward burn strands the cheapest reservations first, which gives a low estimate. We verified the May 2026 migration in CloudTrail.
- The EC2 and ElastiCache figures are AWS's own Cost Explorer purchase recommendations on a 60-day lookback. We cross-checked EC2 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. We label the full-portfolio number as the ceiling.
- We exclude savings that need workload changes, Spot migration, or right-sizing. Everything above is purchasing only, on the fleet as it ran.
Stop overpaying for a steady fleet.
Reserver is in early access. Join the list, and we will onboard you when we have capacity. Your first recommendation lands within minutes of connecting.