Technical8 min readSeptember 4, 2026

FinOps in Practice: How We Reduced Cloud Costs by 40% Without Sacrificing Performance

By Cloud IT Providers Engineering Team

There is a common misconception in enterprise engineering that cloud cost optimization is simply an exercise in turning off non-production environments or purchasing reserved capacity. In reality, cutting costs without sacrificing performance demands a systemic change: transitioning from reactive bill management to a structured FinOps (Financial Operations) culture.

When our cloud bill hit a point where linear user growth was driving exponential infrastructure expenses, we knew a quick fix wouldn't cut it. Over six months, we re-engineered our cost management playbook, embedded financial engineering into our DevOps pipelines, and successfully reduced our overall cloud expenditure by 40%—all while improving system latency and reliability.

Here is the exact framework, architectural blueprint, and step-by-step strategy we used to achieve it.


1. The FinOps Lifecycle Framework

To optimize sustainable spend without stifling developer velocity, we aligned our operational changes with the standard FinOps Foundation lifecycle across three continuous phases:

FinOps Lifecycle Framework
  1. Inform: Establish end-to-end visibility. If you cannot attribute a dollar to a specific engineering team, product feature, or environment, you cannot optimize it.
  2. Optimize: Identify operational inefficiencies, rightsizing opportunities, and commitment portfolio coverage.
  3. Operate: Automate cost guardrails within continuous deployment pipelines so costs don't silently creep back up over time.

2. Phase 1: Inform — Achieving Granular Cost Allocation

Our initial challenge wasn't that we didn't know what we were spending; it was that 35% of our monthly invoice fell under unallocated "shared infrastructure" (unmapped VPC networking, general Kubernetes clusters, shared databases).

Enforcing Strict Infrastructure-as-Code (IaC) Tagging

We implemented automated policy checks in our CI/CD pipelines using Open Policy Agent (OPA) and Terraform to reject any pull request containing un-tagged resources. Every provisioned asset requires four compulsory tags: Environment, Owner, CostCenter, and Service.

Unpacking Kubernetes Shared Clusters

To split shared EKS/GKE cluster costs across internal teams, we deployed KubeCost directly into our clusters. This allowed us to allocate worker node memory and CPU requests back to individual Kubernetes namespaces, deployment pods, and ingress routes.


3. Phase 2: Optimize — Rightsizing Compute & Storage

With visibility established, we addressed resource over-provisioning across compute, memory, and storage layers.

Savings Breakdown

Compute: Architectural Rightsizing & ARM Architecture

  • X86 to ARM64 (AWS Graviton / GCP Tau): We migrated our stateless API services running on standard x86 EC2 instances over to ARM-based Graviton instances. This transition alone delivered a 20% improvement in price-performance with zero code changes required for our Node.js and Go microservices.
  • Aggressive Pod Autoscaling (HPA): Instead of sizing Kubernetes pods for peak traffic loads, we tuned our Horizontal Pod Autoscaler to trigger on memory/CPU thresholds and custom queue-depth metrics from Prometheus.

Storage: Dynamic Tiering and Volume Cleanup

  • EBS Volume Tuning: Upgraded legacy gp2 EBS block storage volumes to gp3, immediately dropping storage unit cost by 20%.
  • S3 Lifecycle Policies: Implemented automated rules to shift log buckets and archival assets from S3 Standard to S3 Infrequent Access (IA) after 30 days, and directly to S3 Glacier Flexible Retrieval after 90 days.

4. Phase 3: Operate — Automation & Engineering Culture

True FinOps success happens when cost considerations are embedded directly into normal engineering workflows.

1. Cost Previews in Pull Requests

We integrated Infracost into GitHub Actions. Whenever a developer opens a pull request altering Infrastructure-as-Code files, a bot posts a precise breakdown of how the changes will impact the monthly cloud invoice before code is merged.

2. Automated Non-Production Shutdowns

Development and staging environments rarely need to run 24/7. We deployed automated schedulers to scale non-production Kubernetes node groups and database instances down to zero at 7:00 PM on weekdays and keep them off through weekends. This move eliminated 60 out of 168 hours of weekly runtime—a ~35% cost reduction for non-production environments.

3. Commitment Coverage Optimization

Rather than buying static Reserved Instances for specific server families, we leveraged flexible Compute Savings Plans. By committing to a baseline dollar-per-hour spend across our core infrastructure, we unlocked discounts up to 66% while retaining the flexibility to change instance families, regions, or container paradigms freely.


Key Metrics & Results

Metric / GoalBefore FinOpsAfter FinOpsImpact
Unallocated Cloud Spend35% of Total Invoice< 2% of Total Invoice+33% Cost Transparency
Non-Prod Environment Hours168 hours/week (Always On)108 hours/week (Scheduled)35% Reduction in Non-Prod Spend
ARM-Based Compute Usage0%75% of Stateless Apps~20% Price-Performance Gain
Total Cloud Bill$100% Baseline60% Baseline40% Total Spend Reduction