TCO analysis for cloud migrations tends to undercount on both sides. On the Azure side, teams focus on compute and storage but miss the operational costs that scale with usage: egress charges, API call costs for Key Vault or Event Grid, Azure Monitor log ingestion, and Defender for Cloud per-resource pricing. These can add 15–30% to the headline compute cost and only show up after the environment has been running for a month or two.
On the on-premises side, TCO calculators often overcount the hardware savings because they assume full hardware depreciation, when in reality many organizations are mid-cycle on equipment that would run for another three years regardless. The honest comparison needs to account for the remaining useful life of existing hardware, not just replacement cost.
A point that rarely appears in TCO guides: idle resources in the cloud have no equivalent on-premises, a rack server sits there whether you use it or not, but at least it doesn't send you a larger invoice. Cloud idle resources do, which means TCO modelling needs a "waste assumption" baked in, typically 20–30% of provisioned resources that are orphaned or underutilized within 18 months. Prunr (http://prunr.cloud) makes that assumption concrete by scanning your live subscription and showing exactly what's idle and what it's costing.