Every time a new budget year starts, I watch a lot of teams suddenly take an interest in Azure cost management. Maybe the budgets have just been set, maybe last year's numbers brought some unpleasant surprises. Either way, it's a good moment to look closely at resource use, subscriptions and spending patterns. In my consulting work I keep seeing the same thing: a handful of practical steps (alerting, enforced tagging, right-sizing and a FinOps routine) can cut costs noticeably without taking away the flexibility that made the cloud attractive in the first place. Below is what works for me and for the kind of customers I deal with most.
Cost Management shows where the money goes and holds the budgets
When I want a clear view of Azure spend, I open Microsoft Cost Management. The built-in cost analysis views are flexible and more detailed than many people expect, and I usually filter by resource group or tags to find unexpected spikes or growth. Early in the budget cycle I recommend defining budgets at subscription level and, for larger projects, at resource group level too. One detail people often miss: an Azure budget can trigger any Action Group, not only email alerts, so you can wire up automation or escalation as a threshold gets close.
If you haven't done this yet, Microsoft's tutorial on creating budgets is a good place to begin. It's not just about having a dashboard. Once teams get the budget warnings themselves, I see them start managing costs ahead of time instead of putting out fires afterwards.
Pro tip: Set alerts at 80% and 95% of your budget and put both IT and business leads in the Action Group. That way it's much harder for overspending to go unnoticed.
Enforced tags put every cost in front of the right person
Without a clear tagging strategy, cost management in Azure runs into trouble sooner or later. I always ask for at least a costCenter and an owner tag, enforced through Azure Policy. You can enforce them at deployment time or fix existing resources afterwards with remediation. In practice, missing or wrong tags are the most common reason cost reports end up useless. A simple policy stops anyone from creating new resources without the tags:
{
"if": {
"allOf": [
{"field": "tags['costCenter']", "exists": "false"},
{"field": "tags['owner']", "exists": "false"}
]
},
"then": {
"effect": "deny"
}
}
It takes very little effort, and you notice the benefit quickly once you need to trace and control spending.
Azure Advisor points me to the waste worth cleaning up
Most Azure environments collect waste over time, such as idle VMs, orphaned disks and leftover public IPs. Azure Advisor is very good at finding these and suggesting what to do about them, whether that's right-sizing, shutting down or deleting. I go through Advisor's cost tab every quarter as a matter of habit. In dev/test environments, enabling auto-shutdown for VMs is the classic quick win. I stopped counting the test servers that ran through the whole weekend by mistake. Public IPs and old managed disks are easy to overlook, especially when projects are winding down, and checking for them regularly saves real money.
Reservations and Savings Plans pay off once workloads are predictable
For predictable workloads, Azure Reservations and Savings Plans both give substantial discounts compared with pay-as-you-go. Which one fits comes down to flexibility. Reservations are tied to specific VM types and locations, whereas Savings Plans work across VM sizes and services. In small and medium environments a one-year commitment is often enough, and three years only makes sense for the most stable workloads.
This is the simple decision flowchart I use when I explain the options:
flowchart TD
Need["Ongoing need?"] -->|"Yes"| Next["Specific VM type?" ]
Need -->|"No"| NoCommit["No commitment"]
Next -->|"Yes"| Reservation["Reservation"]
Next -->|"No"| SavingsPlan["Savings Plan"]
Figure: Decision tree for Reservation vs. Savings Plan vs. On-Demand.
To see whether these changes actually work, I track them in Cost Management. That's where the savings become visible.
A small FinOps routine is enough for SMB Azure environments
Keeping costs under control doesn't require a big FinOps team. For most of my small and mid-sized customers, a light monthly routine does the job:
- Review costs in Cost Management
- Check budgets and alerts
- Go through the Advisor recommendations
- Remove orphaned disks and public IPs
- Spot-check how well resources are tagged
It takes under an hour a month and stops cost management from sliding. Organizations that can't put someone on FinOps full time still avoid the worst surprises this way, and spending stays in line with what it delivers.
Many projects have shaped my view on cost discipline
Cost management in Azure is something you keep doing, not something you set up once and forget. In my experience, transparency, strict tagging and regular clean-up make the biggest difference. Teams that use the Cost Management tools, set budgets and actually act on Advisor's recommendations save real money, and they manage it without elaborate processes. My advice is simple. Stick to the routine and make it a habit, and you'll spend your time building things with Azure rather than chasing budget overruns.


