Right-Sizing: Finding the Gap Between Provisioned and Used
The most reliable cloud saving is not a discount. It is discovering that half your capacity has never been touched.
Right-sizing is unglamorous and consistently the highest-return cost activity available. It needs no negotiation, no commitment and no architectural change — only measurement and the willingness to act on it.
Why over-provisioning happens
- The original size was a guess, made before any load existed.
- It was sized for a launch spike that never recurred.
- Someone doubled it during an incident and nobody reduced it afterwards.
- It was copied from another environment with different requirements.
- A safety margin was applied on top of a figure that already included one.
- Nobody owns the cost, so nobody looks.
The incident-doubling pattern is the most common and the most durable, because reducing it feels risky even when the incident was unrelated to capacity.
The measurement that matters
Use peaks, not averages, over a period long enough to include your real cycles:
| Metric | Period | Reduce if |
|---|---|---|
| Peak CPU | 2–4 weeks | Below 30 per cent |
| Peak memory | 2–4 weeks | Below 40 per cent |
| Disk used | Current | Below 40 per cent of allocated |
| Peak IOPS | 2–4 weeks | Well below provisioned |
| Network peak | 2–4 weeks | Far below plan capacity |
| Database connections | 2–4 weeks | Peak far below max |
Four weeks catches a monthly cycle. If you have quarterly peaks — a billing run, a seasonal event — account for those separately rather than sizing everything for them permanently.
Memory is the one to be careful with
CPU throttling makes things slow. Running out of memory makes things stop, because the kernel kills processes. Leave more headroom on memory than on CPU.
Beware runtimes that expand to fill available memory — the JVM, some databases, and caches configured as a percentage of RAM. Their usage graph reflects configuration, not need, so read the configuration before concluding the memory is required.
Do it safely
- Start with non-production. The risk is negligible and the pattern is often identical.
- Change one size step at a time.
- Reduce during a low-traffic window, since most resizes need a restart.
- Watch for a full week, including the weekly peak, before the next step.
- Note the previous size so reverting is trivial.
- Reduce one dimension at a time when instance families let you, so you know what caused any change.
Beyond instances
- Databases — usually the most over-provisioned resource in an estate, and often sized for a migration years ago.
- Volumes — check allocated against used, and check whether provisioned IOPS are being consumed.
- Kubernetes requests and limits — requests reserve capacity whether or not it is used, so inflated requests waste nodes directly.
- Serverless memory settings — often left at a default that is either wasteful or slow.
- Managed service tiers — a search cluster or cache sized for a peak that no longer exists.
- Non-production entirely — schedule it off outside working hours rather than shrinking it.
Kubernetes requests deserve special attention. A cluster can appear full while nodes sit at 20 per cent CPU, purely because pods reserve more than they use.
Keep it from drifting back
- Run the analysis monthly; the provider tools generate most of it automatically.
- Require a size justification in code review for anything above a threshold.
- Tag resources with an owner so recommendations reach someone who can act.
- Track a utilisation figure alongside the spend figure, so efficiency is visible.
- Re-check after any significant architecture change.
Common questions
What if the workload grows after I reduce it?
Scale back up. That is a ten-minute operation on every cloud platform, and it is the trade that makes right-sizing low-risk.
Should I use the provider recommendations?
They are a good starting list. Verify against your own understanding — recommendation engines do not know about your quarterly batch job.
How much does right-sizing usually save?
On an unreviewed estate, commonly 20 to 30 per cent. It is the largest single saving available without changing anything about how the system works.
Does it conflict with reserved instances?
Only in ordering. Right-size first, then commit to the reduced baseline. Committing first locks in the waste.