HackSec Infotech

Cloud

Cutting a cloud bill 43% without breaking anything

A week-long audit, seven categories of waste and the order we tackled them in. Most of it was not the compute you would expect.

A logistics client asked us to look at a cloud bill that had grown 140% in eighteen months while traffic grew 20%. One week of audit, seven categories of waste, and a 43% reduction with no user-visible change. Here is the order we worked in and why that order matters.

First: find out what you are actually paying for

Before touching anything, tag everything. Most out-of-control bills are out of control because nobody can attribute cost to a team, service or environment. We spent day one enforcing a tagging policy and backfilling tags on existing resources.

The first attribution report answered the question immediately: 38% of spend belonged to non-production environments.

1. Idle and orphaned resources (11% of the total)

The cheapest possible win. Unattached storage volumes from instances terminated years ago. Load balancers with no targets. Snapshots of systems that no longer exist. Three NAT gateways in a region with nothing running in it.

Nothing here required a decision from anyone. It required someone to look.

2. Non-production environments running around the clock (9%)

Development and staging ran 24×7 for a team that worked 09:00–19:00 on weekdays. A scheduled shutdown outside working hours cut those environments by roughly 70% with a manual override button for anyone working late.

The objection we always hear — “someone might need it” — is answered by the override, not by leaving everything running.

3. Wrong instance families (8%)

Memory-optimised instances running CPU-bound workloads, chosen years earlier and never revisited. Right-sizing based on two weeks of actual utilisation data, not on the original guess, closed most of this gap.

The discipline that keeps it closed: a quarterly right-sizing review with utilisation data attached, treated as a normal maintenance task.

4. Storage class mismatches (6%)

Nine terabytes of logs and backups sitting in hot storage, none of it read after the first week. Lifecycle policies moving objects to infrequent-access after 30 days and archival after 90 handled it permanently. Setting the policy took an afternoon; the saving recurs every month.

5. Data transfer nobody had mapped (5%)

Cross-availability-zone chatter between services that had no reason to be in different zones, and an internal API being reached over the public internet because of a DNS default set during a migration. Both were architectural accidents, invisible until we drew the traffic map.

6. Missing commitment discounts (3%)

Deliberately last. Committing to a baseline before you have right-sized is how you lock in your own waste for three years. Once the steady-state footprint was known, savings plans on the genuinely stable portion were straightforward — and we committed conservatively, at about 70% of baseline.

7. Over-provisioned managed services (1%)

A database cluster sized for a peak that had never occurred, and a cache tier with a 4% hit rate that was quietly doing nothing at all. The cache was removed entirely.

Buy commitments last. Every hour spent right-sizing before you commit multiplies the value of the commitment.

Keeping it down

A cost audit that is not followed by a control loop decays within a year. Three things keep the number honest: cost attribution visible per team in a dashboard they actually see, a budget alert that fires on anomalous daily spend rather than monthly totals, and a cost estimate attached to infrastructure pull requests. None of them are heavyweight, and together they have held this client's spend flat through two years of traffic growth.

Need this done, not just read?

We do this work for a living.

If any of the above sounds like a problem you have, a thirty-minute call with the engineer who wrote it is free.

  • Free 30-minute discovery call
  • NDA signed before scoping
  • You own all code and accounts