How We Saved $216K on AWS in 90 Days Without Sacrificing 99.99% Uptime
We cut our AWS bill 26% ($840K → $624K) in three months while keeping uptime above 99.99%. Here’s how we did it — and how you can use the same playbook on your stack.
FinOps discipline + ruthless automation + committing to production-grade operational excellence.
We are a Series B fintech with >$1M monthly API requests. Our platform runs on Kubernetes and handles real-time transactions. In late 2025, spiraling AWS costs threatened to erode our gross margin. After a 30-minute FinOps audit, we identified $314K annualized waste — $216K of it was actionable in 90 days. A 3% infrastructure bill cut delivered a 26% ARR bump. This post walks you through the discovery phase, the 4-vector cut suite, and the automation enforcement layer that cemented savings and freed engineering capacity.
The 4-Vector Cut Suite That Drove $216K in Annual Savings
We didn’t cut corners — we cut waste. We chose a surgical team over a machete, targeting non-negotiables: availability, latency, and security posture remained untouched. The vectors:
- Reserved Instances & Savings Plans: moved 68% of predictable EC2/RI workloads to 1-year Compute Savings Plans. Yielded 17% savings at no operational cost.
- Spot Abstraction & Intelligent Fallback: revamped Kubernetes Cluster Autoscaler + Karpenter profiles to aggressively request Spot, with iops-based fallback. Dropped CPU node spend 29%. Added reliability trickle: fallback latency <45s after Spot reclaim.
- EC2 Right-Sizing Automation: introduced CloudWatch Lambda-driven rightsizing using AWS Instance Utilization reports. Average memory-optimized m5/m6i.large → m6i.large reapplied monthly via a one-click runbook with rollback triggers if p95 latency grew >5ms.
- S3 & EBS Lifecycle Policy Hardening: enforced 15-day transition → IA on >30 days objects, and 1-day expire for build/test prefixes. Reduced S3 Standard bill by 35%. Added 30-day Glacier Deep Archive archive buffer for log retention to cut Glacier retrieval costs during audits.
1) Compute Savings Plans: 17% Savings at Zero Touch
Compute Savings Plans can reduce on-demand rates by up to 32% with the same flexibility as On-Demand. We committed to 1-year All Upfront ($72K PO) covering 68% of our committed steady-state baseline. Why All Upfront? 3-year NPV break-even vs 1-year All Upfront < 12 months, and we wanted zero surprise disruptions upstream. Savings materialized within 7 days of activation. No re-architecting — just invoice magic produced by AWS Cost Explorer.
Reality check: initial Savings Plan did not cover non-production fleets. Export hourly instance usage CSV via CUR + Athena normalized by environment to identify readily convertible non-prod workloads. Exported two 1-year Savings Plans ($16K PO) over non-prod, yielding 11% additional savings without feature toggles.
2) Spot Abstraction + Intelligent Fallback: 29% CPU Node Cut
Our largest workload tier had non-preemptible baseline requests (payment processing). We added dual cluster autoscaler configurations in Karpenter using mixed instance policy: defaulting 80% Spot (c6g.4xlarge, m6g.4xlarge) with fallback On-Demand on iops policy. Karpenter --spot-fallback-mode=immediate gave us <45s reclaim latency measured by kube-state-metrics + Prometheus.
Latency SLA: p95 latency stayed <32ms vs 27ms pre-cut, confirming Spot simultaneous drain does not break our SLA. We later introduced custom capacity rebalancing Lambda triggered by karpenter.k8s.aws/spot-interruption events to drain nodes pre-emptively and auto-replace with on-demand, totaling 29% node compute spend reduction.
3) EC2 Right-Sizing Automation: Continuous Memory/CPU Tuning
We run memory-optimized m5/m6i.large across dev/test. Our compute baseline is steady; no autoscaling.So memory metrics (CloudWatch MemoryUtilization, mem_used_percent) were showing 38% idle average on 16GB nodes. We slotted monthly right-sizing check using aws ec2 describe-instance-status across the fleet and issued ticketed recommendations via automated Slack digest. 92% met suggested resize targets within 30 days; 3 nodes moved to smaller m6i.medium saved $2,942/yr. We integrated a CI-driven IaC override with Atlantis + Plan-only mode: if resize breaches p95 latency SLO >5ms, IaC plan fails automatically and reverts change with a rollback runbook link.
4) S3 & EBS Lifecycle Policy Hardening: 35% Standard 🡒 IA Cut
Our retention policy was simple: “keep in Standard, delete nothing.” We analyzed access patterns via S3 Inventory (Storage Lens). 71% objects untouched >30 days. We enforced:
- Transition rule: 30 → 90 days Standard → Infrequent Access (IA), for objects with last access date >30 days. Saved 35% on Standard storage.
- Expiration rule: 30-day expire on
/build/,/tmp/prefixes. Eliminated 11TB. - Glacier Deep Archive buffer: Log retention >1yr moved to Glacier Deep Archive + 90-day retrieval cost plan during audits; we shaved 18% off retrieval bursts by limiting concurrent restores via S3 Batch + Lambda.
FinOps Automation Stack: Engineering the Runbook Away
Once the cuts were applied, we translated discoveries into repeatable, auditable automation:
## 90-day savings flow (bash snip)
#!/usr/bin/env bash
export AWS_REGION=us-east-1
export STACK=finops-savings-reports
# Pull CUR hourly and emit aggregated Savings Report
aws ce get-cost-and-usage \
--time-period Start=$(date -v-1d +%Y-%m-%d),End=$(date +%Y-%m-%d) \
--granularity MONTHLY \
--metrics AmortizedCost NetUnblendedCost \
--group-by Type=SERVICE Type=USAGE_TYPE | jq -C > current-cost.json
# Issue drift-resolution tickets in Jira/Linear via webhook
# Integrate slack digest with #finops-alerts
# Summary: $216K annualized confirmed, $82K paid already; $314K potential open.
The automation layer produced a continuous cost-drift graph, giving finance + eng a weekly delta view of incurred savings vs. potential leakage. The same script seeds periodic FinOps governance tickets and monthly board slides. Engineering capacity formerly spent on tri-weekly bill puzzles now focuses on roadmap.
Operational Rigor That Held 99.99% Availability
Cost cuts without SLOs are vices, not virtues. We matched each cost vector with a mirror metric SLO:
- Cluster autoscaler + fallback:
klusterlet_workqueue_latency_seconds45s p99 <45s monitored by Datadog. - Reserved/Savings Plan disinvestment: no partial/full RI/Savings Plan cancellation >60 days without capacity review + SLO pass confirmation.
- Right-sizing rollback: revert resize if p95 latency >5ms for >1 hr (Datadog synthetic + RUM).
- Spot/on-demand ratio breach gate: auto-drain Spot nodes with <15% reclaimable capacity across region; enforce proportion via Karpenter drift check lambda to stay <20% on-demand in mixed fleet.
“FinOps Savings ≠ Engineering Ledger Lines. Engineering discipline that secures revenue growth underlies every dollar saved.” — Tayoca infra leadership
ROI & Next Steps
Financial Impact:
- $840K → $624K annual AWS bill (-26%)
- $216K of cut represented pure waste reclaimed without touch to product performance.
- NPV of Savings Plans vs on-demand saved $43K in NPV terms across 3 years.
Engineering ROI:
- We freed ~5 eng-weeks per quarter that were previously spent on bill puzzles. Those hours now ship roadmap features.
- Automated cost stream cut tri-weekly manual digests to zero. We run monthly automated governance.
- Spot + autoscaling resilience added horizontal scale headroom for expected growth — $3M ARR pipeline without incremental infra.
Reproducibility Kit: all IaC, CAR files, Grafana dashboards, alerts, and monthly runbooks are open-source assets you can copy-paste into your own FinOps automation jet. Jump to reproducibility section.
We’ll open-source an EKS Spot-NGINX load balancer with rolling-replace on Spot reclaim sample (Terraform + Helm + Karpenter) as a companion to this post. Stay tuned.
How to Apply This Playbook to Your Stack Today
You don’t need to match our spend scale to get value. Run the audit sequence below in 5 hours:
Pre-Audit: Collect Baseline
- Pull 12-week CUR usage by service via AWS Cost Explorer API.
- Forward CSV to a FinOps automation sandbox deployed in your own account/prod.
- Generate prioritized waste list by sorting by Monthly Savings Potential (extrapolated cost * (1 - RI/Savings plan commitment %)).
Waste Lens: 90-Minute Drift
- Non-production “Christmas tree” instances: filter no-tag/owner and “name” contains “dev|staging|test”. 45% of fleet occupying m5.2xlarge where t3.small suffices. Est. $180 → $45 annual per instance. Found eight. $1,080/yr reclaimed.
- Orphaned EBS gp3 volumes: 500GB x 0.08/GB = $40/month detached from stopped instances. 42 volumes = $1,680/month savings = $20,160/yr.
- S3 Standard storage >90 days: inventory usage pattern. Shave 60% if IA transition done. Use S3 Storage Lens as your single pane.
Plan & Commit: 2-Hour Governance
- Translate top-waste into 3-month engineering epics.
- Get exec sign-off on 3-month Savings Plans with rollback clauses if SLO slips.
- Add quarterly FinOps sprint to eng OKRs; enumerate cost drift in story points.
Automation Sprint (Next 30 Days)
- Wrap rightsizing into a Serverless Lambda invoked bi-weekly by EventBridge. Plug CloudWatch alarm → Slack digest.
- Enable Compute Optimizer in every region; feed recommendations to Karpenter profile.
- Adopt AWS Compute Optimizer savings recommendations as code; let your IaC gates auto-trigger savings if recommendation p95 Improvement >15%.
Reproducibility & Assets
To help you duplicate our results, we are releasing:
- automation/Terraform: eks-spot-optimized module shims Spot + fallback in under 200 lines. Drop-in Helm chart + Atlantis plan-only CI.
- CloudWatch/Karpenter Alerts: packerized dashboards measuring reclaim grace latency, Spot interrupt events, and cluster scale SLO vs actual.
- FinOps Runbook: quarterly savings audit playbook with rollback checklist and exec slide template. Open-source MIT.
- Savings Calculator Spreadsheet: pre-built CUR + savings projections by service; validates Savings Plan ROI pre-commitment. Google Sheets + Airtable version.
Subscribe below and we’ll drop the assets + an invitation to a live FinOps office hours (every other Tuesday) into your inbox.
Call to Action: Book a FinOps Audit Today
Our 90-day $216K feat was built with FinOps integrity — nothing cut but waste. If you’re staring at an AWS bill that’s creeping up without product gains, run a 30-minute FinOps triage with us. We’ll leave you with a prioritized remediation plan and an exec slide deck summarizing potential savings. Hit “Book a Cloud Audit” and we’ll schedule a no-pressure discovery call next week. We don’t do long sales cycles — just sharp engineering and hard savings.