Why the bill grows faster than the business
Cloud cost rarely comes from one big mistake. It comes from hundreds of small defaults that nobody revisits:
- Test and staging environments running 24 hours a day, 7 days a week, used for 50.
- Servers sized for a launch-day guess and never resized.
- Unattached disks, old snapshots and logs kept forever.
- Steady workloads paying full on-demand prices.
- Data transfer through NAT gateways and across availability zones that nobody designed for.
Underneath all of it is one problem: no one owns the cost. If a line on the bill can’t be traced to a team and a product, nobody is accountable for reducing it.
Estimate your saving
A rough estimate from two of the levers below. Change the numbers to match your bill.
Assumes non-production runs 50 of 168 weekly hours (08:00 to 18:00, Monday to Friday) and a conservative 25% average discount on committed spend. Real results depend on your workloads; we measure them in the assessment.
The levers, in order
We start with changes that are quick and safe, and commit to discounts only once usage has been trimmed. Committing first locks in waste.
| Lever | Typical effect | Effort | Risk |
|---|---|---|---|
| Delete what’s unused | Unattached volumes, idle load balancers, old snapshots and images | Low | Low |
| Schedule non-production | 168 → 50 billed hours a week, about 70% less for those resources | Low | Low |
| Modernise storage | gp2 → gp3 volumes (AWS lists gp3 at a lower price per GB); S3 lifecycle rules; log retention | Low | Low |
| Rightsize | Match instance size to measured CPU and memory | Medium | Medium |
| Move to Graviton | AWS quotes up to 40% better price performance for many workloads | Medium | Medium |
| Spot capacity | Large discounts for interruptible work such as CI runners and batch jobs | Medium | Medium |
| Commit | Savings Plans or Azure reservations on the steady baseline | Low | Financial |
Architecture changes often save more than any discount.
A NAT gateway carrying traffic that could use a VPC endpoint, or chatty services split across availability zones, can cost more than the servers themselves. We look at data transfer in every assessment.
Give every dollar an owner
Four tags on every resource, enforced so they can’t be skipped:
| Tag | Example | Answers |
|---|---|---|
owner | payments-team | Who do we ask about this? |
product | checkout | What does this cost per product? |
environment | staging | Can this be switched off at night? |
cost-centre | CC-1042 | Which budget pays for it? |
In Terraform, default tags are applied by the provider, so engineers don’t have to remember them:
provider "aws" { region = "ap-southeast-2" default_tags { tags = { owner = "payments-team" product = "checkout" environment = var.environment "cost-centre" = "CC-1042" } } }
Tag policies in AWS Organizations or Azure Policy then block resources that arrive without them, and the tags are activated for cost allocation so they show up in Cost Explorer and Azure Cost Management.
Switch off what nobody is using
Non-production environments are the easiest saving on most bills. We schedule EC2, RDS, ECS services and Azure VMs by tag, so any resource tagged environment=staging follows the office-hours schedule automatically.
- AWS: Instance Scheduler on AWS, or EventBridge Scheduler for simpler cases.
- Azure: Start/Stop VMs and scaling plans.
- Override: engineers can keep an environment up for a late release with a single tag change, and it reverts the next day.
The same idea applies to offshore desktops. Scaling plans switch session hosts off after the last shift, which is the biggest lever on their monthly cost.
Commit only to the floor
Savings Plans and reservations trade a one- or three-year commitment for a lower hourly rate. AWS lists discounts of up to 72% against on-demand pricing. They pay off only on usage you are sure you’ll keep.
- Commit to the lowest steady level of usage over the last 30-60 days, after rightsizing, not the average.
- Prefer Compute Savings Plans on AWS for flexibility across instance families, regions and Fargate.
- Start with one-year terms and add more in layers each quarter, rather than one large purchase.
- Track coverage (how much usage is discounted) and utilisation (how much of the commitment is used) every month.
A report finance can read
Savings fade without visibility. We set up a monthly report from AWS Data Exports or Azure Cost Management with:
- Spend by team, product and environment, compared with last month.
- Unit cost, such as cost per customer or per transaction, so growth and waste can be told apart.
- Forecast against budget, with alerts before a budget is breached.
- Anomaly alerts for sudden spikes, sent to the owning team.
- Savings delivered, and the next three actions.
Common questions
Will cutting costs make things slower or less reliable?
Not when it is based on measurement. We rightsize from observed CPU and memory with headroom, and leave production redundancy in place. Most savings come from things nobody is using.
How quickly do savings show up?
Clean-up and scheduling show on the next bill. Rightsizing and commitments follow over the next one to two months.
Do you charge a percentage of savings?
No. We charge a fixed price agreed after the assessment, so there’s no incentive to cut anything that shouldn’t be cut.
Do we need a FinOps tool?
Usually not at first. The native AWS and Azure tools cover tagging, reporting, budgets and anomaly detection. We recommend a third-party tool only when you outgrow them.
Next step
Share last month’s bill
A cost export is enough. On a 30-minute call we’ll show you the three biggest savings we can see.