Skip to main content
Back to the Azure Footguns Database
CostHighCommonAZF-0056

An underutilized Azure reservation burns its committed spend silently, hour after hour

You pre-paid for capacity you aren't using. A reservation running below its utilization threshold burns committed dollars silently every hour, and Azure never rolls the unused hours forward.

Footgun ID
AZF-0056 (Azure Footgun No. 56)
Azure service
Azure Reservations & Savings Plans
Resource type
Microsoft.Capacity/reservationOrders/reservations
Updated
July 9, 2026

What it is

An Azure reservation (or savings plan) whose matching usage has drifted below what you committed to. Reservation discounts are use-it-or-lose-it on an hourly basis: every hour the reservation isn't fully applied to running resources, the unused portion of that hour's commitment is simply gone. The bill looks normal — you're paying exactly what you agreed to — which is why nobody notices.

Impact (cost)
the unused share of the commitment — e.g. ~$4,000/month on a $10,000/month reservation running at 60% utilization
Basis: Azure billing mechanics (authored estimate). Figures are estimates, not measurements.

Why it happens

Reservations bill the full commitment regardless of whether anything consumes the discount. The benefit applies hour by hour to matching resources, and unused hours do not roll over.

Utilization drifts down for mundane reasons: VMs get resized to a different family the reservation doesn't cover, workloads move regions, dev environments gain deallocation schedules, or the reservation's scope is pinned to a single subscription while matching VMs now run in another one. Each change is individually sensible; none of them triggers any warning that a commitment elsewhere just lost its match.

Azure's utilization data exists, but it lives in a corner of Cost Management that someone has to remember to open — there is no default alert when a reservation sags to 60%.

What it costs / blast radius

The waste is a billing identity, not a guess: monthly waste = monthly commitment × (1 − utilization%). A reservation costing $10,000/month at 60% utilization wastes ~$4,000/month, about $48,000/year, while the invoice total looks exactly as expected. (Authored estimate from Azure billing mechanics; your commitment amounts and rates are your own.)

The insidious part is the direction of the error: an underutilized reservation never shows up as a cost spike. It shows up as savings you thought you were getting and weren't.

See it

Find it: check utilization for each reservation order
# List reservation orders, then pull utilization summaries
az reservations reservation-order list \
  --query "[].{name:displayName, orderId:name, term:term}" -o table

az consumption reservation summary list --grain monthly \
  --reservation-order-id <order-id> \
  --query "[].{month:usageDate, utilization:avgUtilizationPercentage}" -o table
# Anything persistently below ~85% is burning committed spend
Fix: widen the scope, exchange the reservation, or move matching workloads onto it
# Often the cheapest fix: broaden scope so any subscription can consume it
az reservations reservation update \
  --reservation-order-id <order-id> --reservation-id <reservation-id> \
  --applied-scope-type Shared

# If the workload is truly gone: exchange the reservation for a SKU/region
# you do run, or request a refund (both via the portal's Exchange/Refund flow,
# subject to Azure's exchange and refund policies).

How StratoLens helps

StratoLens tracks utilization for every reservation and savings plan across your subscriptions and flags the ones running below threshold, with the projected monthly waste attached. The check runs continuously inside your own tenant, so a commitment that quietly lost its workload gets surfaced instead of renewing by habit.

Start Your 28-Day Free Trial

Every feature unlocked. Deploys to your Azure tenant. No data leaves your tenant.

Available now on the Azure Marketplace.

Not ready to install anything? Browse the Azure Footguns Database: 55+ documented ways Azure quietly costs money or creates risk.

Request a demo

StratoLens catches the cost waste, access risk, and config drift across your whole Azure estate, from inside your own tenant, so your data never leaves it.