Azure Costs Don't Manage Themselves
"Cloud is cheaper" is the most expensive assumption in IT. Cloud is cheaper if you manage it. Cloud is more expensive if you don't. Most organisations discover this about six months after their first migration.
The first bill is always a shock
I've seen Azure bills that made finance directors physically uncomfortable. Not because the architecture was wrong. Because nobody was watching the meter.
The pattern is always the same: migrate workloads, don't right-size them, leave VMs running 24/7 that were only used during business hours on-prem, provision Premium SSDs for archive storage, forget to set budget alerts. Then act surprised when the bill is 40% higher than expected.
Right-sizing is the single highest-impact cost action you can take. Azure Migrate recommends VM sizes. Those recommendations are conservative. I typically cut 20-30% after a month of actual performance data. A VM that Azure Migrate said should be a Standard_D8s_v5 often runs fine on a D4s_v5 with a third of the cost.
Reservations
If you're running production workloads in Azure without reservations, you're paying 30-40% more than you need to. This isn't optimisation. It's table stakes.
Reservations: commit to one or three years for a specific VM family in a specific region. Savings up to 72%. Requires some planning because you're locking in, but for stable production workloads it's a no-brainer.
The gotcha: reservations require upfront commitment. Finance departments sometimes resist because it moves IT spend from variable (monthly pay-as-you-go) to fixed (annual commitment). This is a cash flow conversation, not a technical one. But the savings are real and significant.
The orphaned resource tax
Every Azure environment accumulates orphaned resources: unattached disks, unused public IPs, old snapshots, test resources that someone spun up and forgot about. These cost real money. In a mid-size environment, orphaned resources typically account for 5-10% of the monthly bill.
I run a cleanup script monthly that identifies unattached disks, unassociated public IPs, idle load balancers, and empty resource groups. Review them. Delete what's not needed. It's tedious but pays for itself in the first month.
The biggest orphaned resource I've found: a Premium SSD, 4TB, unattached for 18 months. Monthly cost: about $600. Nobody knew it existed. The team that created it had been reorganized. The resource group had no tags. This single disk cost the company over $10,000 for absolutely nothing.
Tag or die
Tagging is not a nice-to-have. It's the foundation of cost visibility. Without tags, your Azure bill is a line item called "Azure" with a number next to it. With tags, you know which department spent what, which project is over budget, and which environment needs attention.
My minimum tag set: Environment (prod/non-prod), CostCenter, Application, Owner. Every resource gets these four tags. No exceptions. If a resource can't be tagged, it shouldn't exist.
Enforcement matters more than the tagging standard itself. I use Azure Policy to block resource creation without required tags. Yes, it's heavy-handed. Yes, developers complain. Yes, it saves money because you can actually see where it's going.
The architecture decisions that drive cost
Some cost decisions are architectural and hard to change later:
Data egress. Moving data out of Azure costs money. Moving data between regions costs money. Moving data from Azure to on-prem costs money. Design your data flows to minimise egress. Put storage and compute in the same region. Cache aggressively. Consider the cost of cross-region replication before you enable it.
Log Analytics. It's essential for operations and a common source of bill shock. Set data retention policies. Use basic logs for verbose data that you'll rarely query. Set daily cap limits on non-critical workspaces. A Log Analytics workspace with no retention policy and no cap will consume budgets faster than any VM.
Backup. Azure Backup charges per protected instance. A comprehensive backup strategy for every resource adds up fast. Prioritise: production databases first, critical file shares second, dev/test environments last. Not everything needs the same retention policy. Not everything needs geo-redundant backup.
My cost management routine
Every Monday morning, I look at three things:
- The Azure Cost Management dashboard: actual spend vs. budget, projected month-end spend, top 5 cost contributors
- The orphaned resource report: what's been flagged this week, what's been deleted
- The budget alert log: any alerts that fired, any that are trending toward firing
This takes 15 minutes. It has caught problems ranging from a forgotten test environment running Premium SSDs to a misconfigured auto-scale rule that added 20 unnecessary VMs over a weekend.
Cloud cost management isn't a project. It's a habit. Fifteen minutes a week. Twelve times the savings of not doing it.