Skip to content

Azure

Azure Cost Optimization: Nine Levers That Actually Move the Bill

8 min read

Azure bills grow through accumulation rather than through any single decision. A test environment that outlived its project, a VM sized for a load that never arrived, disks left behind by deleted machines. None of it is dramatic, and together it is frequently a substantial fraction of the invoice.

These are ordered by effort. Start at the top.

1. Delete orphaned resources

Unattached managed disks, unassociated public IP addresses, empty network interfaces, and old snapshots all bill indefinitely while doing nothing. Azure Advisor surfaces most of them, and deleting them carries essentially no risk once you have confirmed nothing references them.

2. Shut down non-production outside working hours

Development, test, and staging environments rarely need to run 168 hours a week. Auto-shutdown on a weekday schedule removes roughly two thirds of their compute cost. This is a configuration change, not a project.

3. Rightsize over-provisioned compute

VMs are typically sized against a worst-case estimate made before the workload existed. Review CPU and memory utilization over a 30-day window; anything consistently below 20 percent is a candidate to drop a size. Do this before buying reservations, or you will commit to capacity you do not need.

4. Correct storage tiers

Blob data sitting in Hot that has not been read in months belongs in Cool or Archive. Lifecycle management policies automate the transition. Check retrieval requirements first — Archive has a rehydration delay that matters for some workloads.

5. Apply Azure Hybrid Benefit

If you hold Windows Server or SQL Server licenses with active Software Assurance, Hybrid Benefit applies them against Azure compute and removes the license component from the meter. The saving on Windows Server VMs is significant, and on SQL Server it is larger still. Many organizations are entitled and simply have not enabled it.

6. Buy reservations against your stable baseline

One and three-year reserved instances offer substantial discounts over pay-as-you-go. The discipline is to commit only to the portion of consumption that is genuinely durable — the floor you have held for months, not the average. Reservations are exchangeable but not freely refundable.

7. Adopt savings plans for variable compute

Where workloads move between VM families or regions, an Azure savings plan commits to an hourly spend rather than a specific SKU. The discount is smaller than a reservation but the flexibility is meaningfully greater.

8. Enforce tagging and hold owners accountable

Untagged resources cannot be attributed, and unattributed cost is nobody's problem. Azure Policy can require tags at creation. Once cost is allocated to a named owner, unused environments start disappearing without anyone needing to chase them.

9. Modernize where the economics support it

Moving a VM-hosted application to App Service, containers, or a managed database can reduce both compute cost and operational overhead. This is genuine project work with genuine risk, so it belongs last — but for long-lived workloads the payback is durable in a way that tactical savings are not.

Making it stick

A one-off optimization exercise decays. Budgets with alerts, a monthly review with named subscription owners, and a standing agenda item are what keep the bill flat. The organizations that control Azure spend are not the ones that did a big cleanup — they are the ones that made review routine.

Let's start with a licensing review.

A short conversation, then a written assessment of what you hold, what you use, and what we would change. No cost, and no obligation to move your licensing.