Cloud Costs Are Not a Finance Problem — They Are an Architecture Problem

Every organisation we work with believes its cloud bill is too high. Most are right. Very few can explain precisely where the excess sits.
The problem is not that engineering teams are reckless. It is that cloud billing is deliberately complex, and most organisations lack both the tooling and the culture required to understand it. Overspend is usually the accumulated residue of reasonable decisions made without cost visibility.
Why Your Bill Is Confusing by Design
Cloud providers charge for compute, storage, transfer, requests, and dozens of add-on services — frequently with tiered pricing that varies by region, service version, and contract type. A mid-size engineering team running 200 services can receive a bill containing 50,000 line items.
Nobody reads 50,000 line items. So nobody knows what is being wasted.
Worse, the line items are denominated in units that mean nothing to the people who caused them. An engineer who provisioned a database does not think in terms of provisioned IOPS-months. The gap between the decision and its cost signal is where waste accumulates.
Framework 1: Tag Everything, or Know Nothing
Cost attribution requires tagging. Every resource needs owner, environment, product, and cost-centre tags applied consistently. Without this you cannot tell whether a $4,000/month cluster is powering your payment service or is a forgotten proof-of-concept from six quarters ago.
We typically find 15–25% of cloud spend attributed to "untagged resources" — which is engineering shorthand for money with no owner and no accountability.
Implementation approach
- Enforce tagging policy in your Terraform modules, so untagged resources cannot be provisioned
- Add a CI/CD check that fails builds introducing untagged infrastructure
- Quarantine existing untagged resources automatically after a grace period
- Send weekly untagged-spend reports to engineering leads rather than to finance
That last point matters more than it appears. Cost reports sent to finance produce spreadsheets. Cost reports sent to the engineers who can actually change the architecture produce changes.
Framework 2: Separate Waste from Investment
Not all idle capacity is waste, and treating it as such causes outages.
A pre-warmed database read replica sits idle most of the time and is worth every rupee during a traffic spike. A development instance running 24 hours a day when developers work eight is roughly 67% waste. These look similar on a utilisation dashboard and are completely different decisions.
Map resources to business purpose before optimising anything. Then apply scheduling, auto-scaling, and interruptible-instance strategies only to the genuine waste category. Optimisation applied indiscriminately is how cost programmes end up causing incidents and losing organisational support.
A practical classification
- Load-bearing — serves production traffic, optimise for reliability first
- Burst capacity — idle by design, exists for spikes, leave alone
- Scheduled — needed during working hours only, automate start/stop
- Orphaned — no owner, no traffic, no recent deploys, decommission
Framework 3: Match Pricing Model to Workload Shape
Most teams default to on-demand pricing, which is the most expensive option available. The pricing model should follow the shape of the workload.
- Predictable baseline load belongs on reserved instances or savings plans, typically 30–60% cheaper than on-demand
- Interruptible work — batch jobs, model training, non-critical background processing — belongs on spot capacity, which can reach 90% cheaper
- Genuinely spiky, unpredictable load is the only category where on-demand is the correct answer
One client saved ₹28L per month simply by moving ML training jobs from on-demand GPU instances to spot capacity, with automated restart logic handling interruptions. The workload tolerated interruption perfectly well; it had been running on-demand purely because nobody had revisited the original default.
Framework 4: Attack Data Transfer and Storage Tiering
Compute dominates the conversation, but data charges are where quiet overspend accumulates.
Cross-availability-zone transfer, NAT gateway processing, and egress to the public internet are billed at rates that surprise most teams when first itemised. Architectural choices — where services sit relative to each other, whether traffic traverses a NAT gateway unnecessarily, whether you are paying to move data you could cache — often matter more than instance sizing.
Storage follows the same pattern. Objects written once and read rarely do not belong in hot storage. Lifecycle policies that transition data to infrequent-access and archive tiers are among the highest-return, lowest-risk changes available, and they are frequently never configured at all.
Framework 5: Build a FinOps Culture
Technology alone does not fix cloud waste. Engineering culture has to treat cloud spend as a variable that engineers own, rather than a fixed cost that finance manages somewhere else.
The mechanisms that have worked across our client base are unglamorous:
- Monthly engineering forums where cost dashboards are reviewed alongside reliability metrics
- Per-team cloud budgets with visible burn-down, owned by the team
- Cost impact estimates included in architecture review documents
- Cost-saving results shared publicly, so the work is visible and rewarded
The goal is to shorten the distance between an infrastructure decision and its financial consequence. When an engineer can see the cost of a design choice at the moment of making it, most of the waste never gets created.
Where to Start
If you are beginning from no visibility, resist the urge to optimise immediately. Sequence it:
- Establish tagging and attribution, so you can see spend by team and product
- Identify and decommission orphaned resources — the fastest, safest win available
- Right-size pricing models against workload shape
- Address storage tiering and data transfer architecture
- Embed cost into engineering process so the problem does not silently return
Cloud cost work is not a one-off cleanup. Without the fifth step, you will run the same exercise again in eighteen months and find the same 20% of waste, freshly accumulated.
Frequently asked questions.
How much can we realistically cut from our cloud bill?
For an environment that has never had a structured cost programme, 20–35% is a realistic target without any reduction in reliability. Most of that comes from decommissioning orphaned resources, matching pricing models to workload shape, and fixing storage tiering — not from running production systems closer to the edge.
What is the fastest cloud cost win available?
Finding and decommissioning orphaned resources — anything with no owner, no traffic, and no recent deployments. It is the lowest-risk change available because nothing is using it, and in most environments it recovers a meaningful percentage of spend within days.
Are reserved instances or savings plans worth the commitment?
For predictable baseline workloads, yes — they typically cost 30–60% less than on-demand. The mistake is committing on total spend before you know which portion of your load is genuinely stable. Establish attribution first, identify the steady-state baseline, then commit against that portion only.
Who should own cloud cost — engineering or finance?
Engineering owns the decisions; finance owns the reporting. Cost data sent only to finance produces spreadsheets. The same data sent to the engineers who can change the architecture produces architectural change. Cost has to be visible at the point where infrastructure decisions are made.
Priya Nair
Principal Cloud Architect, Durrani Tech