How to Reduce Cloud Costs Without Slowing Down Your Team
A practical playbook to cut AWS, GCP and Azure bills: visibility and tagging, rightsizing, commitments, autoscaling, storage lifecycle and making cost part of engineering.
By the PageChck engineering team · · 8 min read
Cloud bills rarely explode overnight. They creep. A staging cluster nobody scaled down, a database sized for a launch that happened two years ago, logs retained forever “just in case”. Each decision made sense at the time, and together they quietly become one of the largest lines in your budget.
You are not alone if this feels hard to control. In Flexera’s 2025 State of the Cloud report, 84% of organizations said managing cloud spend is their top cloud challenge. The good news: most savings come from a handful of repeatable practices, and none of them require slowing your engineers down.
1. You can’t cut what you can’t see
Before touching a single instance, make spend attributable. If the bill says “EC2: $38,000” nobody feels responsible. If it says “checkout-service, production: $9,400” the owning team will have ideas by Friday.
- Adopt a tagging (or labeling) standard with a small set of mandatory keys such as
team,service,environmentandcost-center. - Enforce it in code, not in a wiki. Default tags in your Terraform provider and policy checks in CI catch untagged resources before they exist.
- Separate accounts or projects per environment. AWS Organizations, GCP folders and Azure management groups give you clean cost boundaries for free.
- Turn on the native tools — AWS Cost Explorer and Budgets, GCP Billing export to BigQuery, Azure Cost Management — and send anomaly alerts to the team that owns the spend.
provider "aws" {
region = var.region
default_tags {
tags = {
team = var.team
service = var.service
environment = var.environment
managed-by = "terraform"
}
}
}2. Rightsize based on real utilization
Most workloads are sized for a peak that never comes. Look at at least two to four weeks of CPU, memory and I/O metrics, then size for the realistic peak plus headroom — not the theoretical worst case.
- Use the provider’s recommendations (AWS Compute Optimizer, GCP Recommender, Azure Advisor) as a starting point, then validate against your own dashboards.
- In Kubernetes, compare requests to actual usage. Over-requested pods force the cluster to add nodes that sit mostly idle.
- Allocate Kubernetes costs with OpenCost or Kubecost. A cluster shows up as one line on the cloud bill; these tools split it by namespace, workload and label so each team sees what its services actually cost — including the idle capacity they reserve but don’t use.
- Move to newer instance generations and ARM-based families (Graviton, Tau T2A, Cobalt/Ampere) where your software supports it — they often deliver better price-performance for the same workload.
3. Pay for what you use: autoscaling and schedules
A fixed fleet sized for Monday 10am is wasted at Sunday 3am. Elasticity is the core promise of the cloud, but it has to be configured.
- Horizontal autoscaling for stateless services, driven by CPU, request rate or queue depth.
- Cluster autoscaling (Karpenter, GKE Autopilot, AKS node autoprovisioning) so nodes follow pods instead of the other way round.
- Schedules for non-production. Dev and staging environments that only run during working hours (about 50 of the 168 hours in a week) cost roughly a quarter to a third of ones that run 24/7.
- Serverless and scale-to-zero (Lambda, Cloud Run, Azure Container Apps) for spiky or low-traffic workloads.
4. Commit where the baseline is stable
Once usage is rightsized, the steady baseline that remains is a good candidate for discounted pricing: Savings Plans and Reserved Instances on AWS, Committed Use Discounts on GCP, and Reservations or Savings Plans on Azure.
The order matters. Rightsize first, commit second. Committing to an oversized fleet locks in waste for one to three years. Start by covering a conservative share of your baseline and increase coverage as you gain confidence.
For fault-tolerant workloads — CI runners, batch jobs, stateless workers — spot or preemptible capacity offers deep discounts in exchange for possible interruption. Design for it with checkpointing and diversified instance types.
5. Storage and data transfer: the silent costs
Compute gets the attention, but storage and networking often hide the easiest wins.
- Lifecycle policies that move old objects to infrequent-access or archive tiers, and delete what has no business value.
- Clean up orphans: unattached volumes, old snapshots, unused load balancers and idle public IPs.
- Set log retention deliberately. Keep high-resolution logs for days or weeks, aggregate or archive the rest.
- Watch data transfer. Cross-zone and cross-region traffic and NAT gateway processing can add up fast. VPC endpoints / Private Service Connect and keeping chatty services in the same zone help.
6. Make cost an engineering metric
One-off clean-ups decay. Lasting savings come from putting cost in front of the people who make architectural decisions, at the moment they make them.
- Show estimated cost changes in pull requests for infrastructure changes, using tools such as Infracost.
- Track unit costs — cost per customer, per order, per thousand requests — so growth and efficiency can be told apart.
- Run a short monthly cost review per team: top movers, anomalies, and one improvement to ship.
A simple 30-day plan
- Week 1: enable billing exports, define tags, and build a cost-by-team dashboard.
- Week 2: delete orphaned resources, set storage lifecycle and log retention policies.
- Week 3: rightsize the top ten most expensive workloads and schedule non-production environments.
- Week 4: review the new baseline and buy commitments for the stable part of it.
If you want help running this plan, our scalability and cost optimization service covers it end to end, and our Infrastructure as Code work makes the savings stick.
Reducing cloud costs is less about heroic one-time projects and more about visibility, sensible defaults encoded in Infrastructure as Code, and a regular feedback loop. Get those in place and savings keep compounding while your team keeps shipping.