A manufacturing operations client running IoT sensor data collection across several facilities had watched their AWS bill grow steadily for over a year without a corresponding increase in sensor count or data volume. Here's what a 2-week audit found, and what we fixed.
The Starting Point
The client's architecture ingested sensor telemetry from factory floor equipment, stored it for compliance and analysis, and ran nightly aggregation jobs for operations dashboards. Nobody on their small internal team had bandwidth to regularly audit AWS spend — the bill had simply grown month over month as engineers added resources to solve immediate problems without decommissioning what came before.
What the Audit Found
1. Orphaned Resources
Nearly 20% of the monthly bill traced to resources with no active traffic — EBS volumes detached from terminated instances, unused Elastic IPs, and several RDS read replicas created for a since-abandoned reporting project that were never decommissioned.
2. Oversized Compute
The core ingestion service ran on instances sized for a peak load that occurred during initial launch testing, but had never been rightsized down after actual production traffic patterns stabilized at a fraction of that peak.
3. Inefficient Data Storage Tiering
Sensor telemetry was stored entirely in S3 Standard, including data older than 90 days that was accessed rarely if ever, but retained for compliance purposes.
4. Redundant Data Processing
The nightly aggregation job reprocessed the full historical dataset every run instead of incrementally processing only new data since the last run — a design that made the job's cost scale with total historical data volume rather than staying flat.
What We Fixed
Orphaned resources: Implemented AWS Config rules to flag unattached EBS volumes and unused Elastic IPs automatically going forward, and decommissioned the identified orphaned resources after confirming with the client they were safe to remove.
Rightsizing: Used CloudWatch utilization metrics to rightsize the ingestion service's instance types, moving from oversized general-purpose instances to a smaller fleet with auto-scaling based on actual load patterns.
Storage tiering: Implemented S3 Lifecycle policies to automatically transition data older than 90 days to S3 Glacier Instant Retrieval, preserving compliance-required access while dramatically reducing storage cost for infrequently accessed data.
{
"Rules": [{
"ID": "SensorDataTiering",
"Status": "Enabled",
"Transitions": [
{ "Days": 90, "StorageClass": "GLACIER_IR" },
{ "Days": 365, "StorageClass": "DEEP_ARCHIVE" }
]
}]
}
Incremental processing: Rewrote the nightly aggregation job to process only new data since the last successful run, tracked via a watermark table, decoupling job cost from total historical data volume.
Results
The combined changes reduced the client's monthly AWS bill by roughly 45%, with the storage tiering and incremental processing changes accounting for the largest share of ongoing savings since those addressed cost drivers that would have kept compounding as data volume grew.
Why This Kind of Waste Is So Common
Nobody sets out to waste cloud spend — it accumulates from reasonable individual decisions (provision generously to be safe, keep resources around in case they're needed again) made without a regular audit process to catch the accumulation. A 2-week focused audit, repeated periodically, catches this before it becomes a much larger structural cost problem.
Curious what a similar audit would find in your AWS account? Get a free AWS cost review — 907-841-8407 or contact@rutagon.com.
Frequently Asked Questions
How common are orphaned or unused AWS resources?
Very common. In our experience, accounts that haven't had a dedicated cost audit in 6+ months typically have meaningful orphaned resource waste — unattached storage volumes, unused IP addresses, and forgotten infrastructure from abandoned projects.
How long does an AWS cost optimization audit take?
A focused audit covering rightsizing, orphaned resources, storage tiering, and data processing efficiency typically takes about 2 weeks, producing a prioritized fix list with estimated savings per item.
Will rightsizing instances affect application performance?
When done based on actual CloudWatch utilization data rather than guesswork, rightsizing should maintain or improve performance by better matching capacity to real load patterns, often combined with auto-scaling to handle traffic spikes.
What is S3 Lifecycle tiering and how much can it save?
S3 Lifecycle policies automatically move data to cheaper storage classes (Glacier Instant Retrieval, Deep Archive) after a specified age, based on access patterns. For infrequently accessed historical data, this can reduce storage costs substantially compared to leaving everything in S3 Standard.
How often should a company audit its AWS costs?
We recommend a full audit at least twice a year for stable environments, and continuous automated monitoring (via AWS Config rules and cost anomaly detection) in between to catch new waste before it accumulates significantly.