Skip to main content
All posts
Cloud Architecture11 min read

How We Cut a Client's Azure Bill by 40%: A Real-World Cost Optimization Case Study

A detailed walkthrough of how CC Conceptualise reduced an enterprise client's Azure spend by 40% through systematic discovery, quick wins, and architectural optimization.

Published

Every enterprise Azure environment has waste. The question is how much and where. In this case study, we walk through a real engagement where we reduced a client's Azure spend from approximately 82,000 EUR/month to 49,000 EUR/month — a 40% reduction — without degrading performance or reliability.

The client details are anonymized, but the numbers, approach, and timeline are authentic. This is how systematic cost optimization works in practice.

The Client Profile

Industry: Mid-market manufacturing company with digital operations Azure footprint: ~300 resources across 8 subscriptions Monthly Azure spend: ~82,000 EUR (trending upward at ~5% month-over-month) Team: 12-person IT department, 4 with Azure responsibilities Pain point: Azure costs had nearly doubled in 18 months with no corresponding increase in workload volume

The client had adopted Azure organically. Different teams provisioned resources as needed, there was no centralized governance, and nobody had a clear picture of what was running or why.

Optimization Phases

Loading diagram...
Loading diagram...

Phase 1: Discovery (Weeks 1-2)

We started with a comprehensive inventory and cost analysis. The goal was to understand where every euro was going before recommending any changes.

Tooling Used

  • Azure Cost Management: 12-month cost trend analysis by subscription, resource group, resource type, and meter
  • Azure Advisor: All cost recommendations across subscriptions
  • Azure Resource Graph: Custom queries for resource inventory, configuration, and utilization
  • Custom scripts: PowerShell-based utilization analysis pulling 30-day metrics for all VMs and databases

What We Found

The initial cost breakdown by category:

CategoryMonthly Cost% of Total
Virtual Machines (IaaS)38,500 EUR47%
Azure SQL / Databases14,800 EUR18%
Storage (Blob, Disk, Files)8,200 EUR10%
Networking (VPN, ExpressRoute, LB)6,600 EUR8%
App Services / Functions5,400 EUR7%
Kubernetes (AKS)4,100 EUR5%
Other (Monitoring, Key Vault, etc.)4,400 EUR5%
Total82,000 EUR100%

Key discovery findings:

  1. 68% of VMs were significantly over-provisioned. Average CPU utilization was 12%. Average memory utilization was 23%. Many VMs were provisioned for peak load that occurred once a quarter.
  2. 31 orphaned resources were identified: 14 unattached managed disks, 8 unused public IPs, 5 empty resource groups with associated resources, and 4 stopped VMs still incurring disk and IP costs.
  3. Zero commitment discounts. Everything was running on pay-as-you-go pricing. No Reserved Instances, no Savings Plans.
  4. Dev/test environments running 24/7. Three full development and two staging environments ran around the clock, including weekends and holidays.
  5. Premium storage tiers on non-performance-sensitive workloads. Several archival and logging storage accounts used Premium SSD when Standard HDD would suffice.
  6. SQL databases over-provisioned by 3-4x. Multiple Azure SQL databases running at S3/P1 tiers when S1/S2 would handle the actual workload.
  7. No Azure Hybrid Benefit applied. The client had existing Windows Server and SQL Server licenses through their Enterprise Agreement but had not activated AHUB on any Azure resources.

Phase 2: Quick Wins (Weeks 2-4)

Quick wins are changes that deliver immediate savings with minimal risk and no application architecture changes.

Quick Win 1: Orphaned Resource Cleanup

Action: Deleted 14 unattached managed disks, released 8 unused public IPs, removed 4 stopped VMs with their associated disks.

Monthly savings: 1,850 EUR

This was pure waste — resources costing money and serving no purpose. We validated each deletion with the responsible team to ensure nothing was intentionally preserved.

Quick Win 2: Dev/Test Auto-Shutdown

Action: Implemented Azure Automation schedules to shut down all dev/test VMs at 19:00 and restart at 07:00 on weekdays. Complete shutdown on weekends.

Calculation: Dev/test VMs accounted for ~11,200 EUR/month. Running 12 hours/day on weekdays only represents ~36% of 24/7 runtime.

Monthly savings: 7,200 EUR

Some teams initially resisted, concerned about availability for late-night work. We added a self-service restart mechanism via a Teams bot that any developer could use to start their environment on demand.

Quick Win 3: Azure Hybrid Benefit Activation

Action: Applied Azure Hybrid Benefit to all eligible Windows Server VMs (28 VMs) and SQL Server databases (6 instances).

Monthly savings: 4,600 EUR

This was free money. The client already paid for these licenses through their EA. AHUB simply applies the license to Azure resources, eliminating the Windows Server or SQL Server license component from the Azure bill.

Quick Win 4: Storage Tier Optimization

Action: Migrated 4 storage accounts from Premium SSD to Standard SSD, and 2 archival storage accounts to Cool tier. Moved 18 months of log data to Archive tier.

Monthly savings: 2,100 EUR

We ran performance tests before each migration to confirm no measurable impact on application performance.

Quick Win 5: Snapshot Cleanup

Action: Deleted 47 VM snapshots older than 90 days, totaling 4.2 TB. Implemented an automated policy to delete snapshots older than 30 days going forward.

Monthly savings: 380 EUR

Small individually, but these accumulate silently over time.

Total Quick Wins: 16,130 EUR/month (19.7% reduction)

Phase 3: Medium-Term Optimizations (Weeks 5-8)

Medium-term optimizations require more analysis, testing, and coordination with application teams.

Optimization 1: VM Right-Sizing

This was the largest single optimization. We analyzed 30 days of CPU, memory, network, and disk metrics for every production VM.

Methodology:

  1. Pull P95 utilization metrics for CPU and memory over 30 days
  2. Identify VMs where P95 CPU is below 40% AND P95 memory is below 60%
  3. Recommend one size down (or two sizes down for severely over-provisioned VMs)
  4. Validate with application owners
  5. Implement during maintenance windows with rollback capability

Results:

VM CategoryCountBefore (Monthly)After (Monthly)Savings
Production app servers1412,400 EUR7,800 EUR4,600 EUR
Database servers68,200 EUR5,100 EUR3,100 EUR
Utility/infra VMs83,600 EUR1,900 EUR1,700 EUR
Total2824,200 EUR14,800 EUR9,400 EUR

Three application owners initially pushed back on right-sizing, concerned about peak performance. We implemented the changes with a 2-week observation period and automatic alerting if utilization exceeded 80%. None triggered.

Optimization 2: SQL Database Right-Sizing

Similar to VMs, we analyzed DTU/vCore utilization for all Azure SQL databases over 30 days.

Results:

DatabaseBeforeAfterMonthly Savings
ERP PrimaryP1 (125 DTU)S3 (100 DTU)520 EUR
CRM DatabaseS3 (100 DTU)S2 (50 DTU)230 EUR
Reporting DBP1 (125 DTU)S3 (100 DTU)520 EUR
Integration DBS2 (50 DTU)S1 (20 DTU)140 EUR
Logging DBS3 (100 DTU)S1 (20 DTU)340 EUR
Analytics DBS3 (100 DTU)S2 (50 DTU)230 EUR
Total1,980 EUR

Optimization 3: Reserved Instance Purchases

With right-sized resources established, we could now make informed commitment purchases.

Purchases made:

  • 3-year RIs for 18 production VMs (stable workloads): ~55% discount
  • 1-year RIs for 6 database VMs (stable but may change size): ~33% discount
  • 3-year reserved capacity for 4 Azure SQL databases: ~50% discount

Monthly savings from reservations: 5,400 EUR

We intentionally left dev/test and variable workloads on pay-as-you-go, and recommended reviewing for Savings Plans in 6 months once the new baseline stabilized.

Total Medium-Term Optimizations: 16,780 EUR/month

Phase 4: Structural Changes (Weeks 9-16)

Structural changes deliver the deepest long-term savings but require more effort and carry more risk.

Structural Change 1: PaaS Migration for Two Workloads

Two internal web applications were running on IaaS — dedicated VMs with Windows Server, IIS, and SQL Server. We migrated them to Azure App Service and Azure SQL.

Before: 2 VMs (D4s_v5) + 2 SQL Server VMs = ~3,200 EUR/month After: 2 App Service plans (P1v3) + 2 Azure SQL (S2) = ~1,100 EUR/month

Monthly savings: 2,100 EUR

The PaaS migration also reduced operational overhead — no more OS patching, IIS configuration, or SQL Server maintenance for these workloads.

Structural Change 2: AKS Node Pool Optimization

The AKS cluster was running 6 nodes of D4s_v5 permanently. Actual pod resource requests used roughly 40% of available capacity.

Changes:

  • Reduced default node pool from 6 to 3 nodes
  • Enabled cluster autoscaler (min 3, max 8)
  • Added a Spot VM node pool for non-critical workloads
  • Implemented pod resource limits to prevent over-requesting

Before: 6x D4s_v5 = ~1,740 EUR/month After: 3x D4s_v5 (baseline) + Spot scaling = ~750 EUR/month average

Monthly savings: ~990 EUR

Total Structural Changes: 3,090 EUR/month

The Complete Picture

Before and After Summary

CategoryBefore (Monthly)After (Monthly)Savings
Quick wins (orphaned, schedules, AHUB, storage)82,000 EUR baseline-16,130 EUR16,130 EUR
VM right-sizing-9,400 EUR9,400 EUR
SQL right-sizing-1,980 EUR1,980 EUR
Reserved Instances-5,400 EUR5,400 EUR
PaaS migration-2,100 EUR2,100 EUR
AKS optimization-990 EUR990 EUR
New monthly total82,000 EUR~49,000 EUR~33,000 EUR (40%)

Annualized Impact

  • Annual savings: ~396,000 EUR
  • Engagement cost: Approximately 6 weeks of consulting effort
  • Payback period: Less than 1 month
  • 3-year reserved instance savings included: The RI purchases lock in additional savings that grow more valuable as pay-as-you-go prices increase

Timeline and Effort

PhaseTimelineEffort RequiredRisk Level
DiscoveryWeeks 1-2Consultant-led, minimal client effortNone
Quick winsWeeks 2-4Low — mostly cleanup and configurationLow
Medium-termWeeks 5-8Medium — requires application team coordinationMedium
StructuralWeeks 9-16High — architecture changes and migrationMedium-High

What Made This Engagement Succeed

1. Data-Driven Decisions

Every recommendation was backed by 30+ days of utilization data. We never recommended changes based on assumptions or vendor sizing guides alone.

2. Application Team Buy-In

We involved application owners in every right-sizing decision. This took more time but eliminated resistance and ensured we did not miss performance-critical requirements.

3. Incremental Implementation

We did not try to change everything at once. Quick wins built credibility and momentum. Medium-term optimizations were implemented with rollback plans. Structural changes had full migration runbooks.

4. Governance for Sustainability

Cost optimization without governance is a one-time cleanup. We established:

  • Monthly cost review cadence
  • Tagging policy enforcement
  • Budget alerts at subscription and resource group level
  • Azure Advisor recommendation review process
  • Dev/test auto-shutdown automation

5. Honest Scope Management

We recommended against several potential optimizations that would have added complexity without sufficient ROI:

  • Migrating a legacy application to containers (high risk, moderate savings)
  • Implementing spot VMs for production batch processing (insufficient fault tolerance in the application)
  • Changing Azure regions for marginal pricing differences (latency impact not worth 3% savings)

Lessons Learned

Orphaned resources are universal. Every Azure environment we assess has them. The longer the environment has been running, the more waste has accumulated.

Right-sizing is the highest-ROI activity. VM and database right-sizing consistently delivers the largest savings with the lowest risk. Most enterprise resources are provisioned for worst-case scenarios that rarely occur.

Commitment discounts should come after right-sizing. Buying Reserved Instances for over-provisioned VMs locks in waste. Always right-size first, then commit.

Dev/test costs are a surprise. Organizations consistently underestimate how much they spend on non-production environments. Automated schedules and proper licensing (Visual Studio subscription dev/test pricing) can cut non-production costs by 60-80%.

Azure Hybrid Benefit is frequently overlooked. Clients with Enterprise Agreements often forget to activate AHUB, leaving significant savings on the table for zero effort.

Your Azure Environment

If your Azure costs have been growing faster than your workloads, the pattern described in this case study probably applies to your environment. The specific numbers will differ, but the categories of waste — over-provisioning, orphaned resources, missing commitment discounts, and 24/7 non-production environments — are remarkably consistent across enterprises.

At CC Conceptualise, we run Azure cost optimization engagements that follow this proven methodology. We bring the tooling, the analytical framework, and the experience to identify and capture savings quickly. Most clients see payback within the first month.

Want to know what 40% of your Azure bill looks like? Reach out to us at mbrahim@conceptualise.de for an initial assessment.

Topics

Azure cost optimizationcloud cost reductionAzure cost case studyenterprise cloud savingsAzure right-sizing

Frequently Asked Questions

A comprehensive optimization engagement runs 12-16 weeks. Quick wins like orphaned resource cleanup and right-sizing deliver savings within weeks 2-4. Medium-term optimizations like reserved instances take effect in weeks 5-8. Structural changes like PaaS migration typically require 8-16 weeks depending on complexity.

Expert engagement

Need expert guidance?

Our team specializes in cloud architecture, security, AI platforms, and DevSecOps. Let's discuss how we can help your organization.

Get in touchNo commitment · No sales pressure

Related articles

All posts