Azure gives you reservations, savings plans, spot, autoscale, dev/test pricing and Azure Hybrid Benefit. That is more levers than AWS or Google offer, and it is why Azure bills are frequently both the most over-discounted on paper and the most wasteful in practice — teams buy a three-year reservation for VMs that a hybrid benefit and a rightsizing would have shrunk by half.
Here is the order.
1. Attribution first
Cost Management gives you cost analysis grouped by subscription, resource group and tag. Group by tag and look at how much lands in "untagged". If it is over a third, the rest of this exercise has no owner and will not stick.
Fix it with an Azure Policy Modify effect that inherits environment, owner and cost-centre tags from the resource group, plus a Deny on creating untagged resources in production. It is the same first step as on the AWS bill, and it works the same way.
Then set budgets with action groups at subscription level. Not because a budget stops spending — it does not — but because an alert at 80 percent of forecast is how you find out about the runaway before the invoice does.
2. Azure Hybrid Benefit, before anything else
If your organisation has Windows Server or SQL Server licences with Software Assurance, you can apply them to Azure VMs and SQL, cutting the price by up to 40 percent for Windows and considerably more for SQL Server Enterprise. Many teams do not know their own licence entitlements, so this is a conversation with whoever manages the Microsoft agreement, not an engineering task.
It goes first because it changes the price of the capacity you are about to reserve.
3. Delete and rightsize
Azure Advisor surfaces idle and underutilised resources, and the usual haul is consistent:
- Unattached managed disks from deleted VMs. Azure keeps them; they bill monthly.
- Idle public IPs, especially static ones left after a load balancer change.
- Stopped VMs that are not deallocated. A VM in "Stopped" state still bills for compute. Only "Stopped (deallocated)" does not. This catches teams every single time.
- Old snapshots and orphaned disk backups.
- Over-provisioned App Service plans running one small app on a P2v3.
- Log Analytics ingestion from diagnostic settings nobody reads, which on a large estate can be one of the top three lines. Set per-table retention and switch the noisy tables to the basic logs tier.
Rightsizing: Advisor's VM recommendations use 14 days of metrics. As on other clouds, verify the memory metric is actually being collected before trusting a downsize — without the agent, the recommendation is a guess.
4. Shut down what should not run at night
Dev/test subscriptions under an Enterprise Agreement get discounted rates, and non-production VMs should be on an auto-shutdown schedule. A VM running 168 hours a week for a team that works 40 is paying four times what it needs to. Automation account, one runbook, one afternoon.
5. Then commit
With the footprint corrected, commit against the new baseline:
- Reservations for VMs, SQL Database, Cosmos DB, Storage and the rest. They are the deeper discount and they are scoped to an instance family and region. Use shared scope at the billing account level rather than a single subscription, so the reservation applies wherever the capacity is.
- Azure savings plan for compute where flexibility matters more than depth. It applies across VM families and regions automatically, at a smaller discount than a reservation. Our default is savings plan for the general compute baseline and reservations for the specific, stable, large workloads — a database cluster that will not move.
- One-year terms first, and a coverage target of 60 to 70 percent of the baseline rather than 100.
Reservations are exchangeable and refundable within limits, but the limits changed over the years and you should check the current terms before assuming you can undo it.
6. Recheck monthly
Cost Management's reservation utilisation report shows whether what you bought is being used. An 80 percent utilised reservation means you overbought, and the fix is an exchange, not an acceptance.
What to expect
The usual result on an Azure estate that has never had this done is 30 to 45 percent, with the majority of it coming from steps two through four — before any commitment. That is the argument for the ordering: a reservation bought first would have locked in the waste. We work through this in the cost phase of a cloud engagement.
What to do this week
Run a query across your subscriptions for VMs in the Stopped state rather than Stopped (deallocated), and for unattached managed disks. Both are pure waste, both are safe to fix, and both are usually larger than anyone expects.