Regulated SaaS client
ECS Fargate Cost Reduction
ECS Fargate ran around the clock in environments that only needed capacity during business hours.
Situation
A regulated SaaS client ran ECS Fargate services across development, staging, and production. Several workloads were batch-oriented or used only during business hours, but every service maintained a steady desired count 24/7. AWS spend climbed without a matching jump in active users or tenant volume.
Risk or constraint
Idle capacity was burning recurring spend every month. Finance was asking why infrastructure costs outpaced growth, and the team had no attribution model to show which environments or services drove the line item.
Diagnosis
The problem wasn't Fargate itself, it was a deployment default. Workloads were provisioned for peak availability even when peak never arrived outside a narrow window. Right-sizing instance sizes wouldn't help if the services stayed running when nobody was using them.
Work completed
- Mapped each ECS service to its actual traffic and usage window, not its worst-case scenario
- Added Application Auto Scaling scheduled actions to scale desired count to zero in off-hours for eligible environments
- Applied per-environment capacity controls so dev and staging couldn't inherit production sizing by default
- Wired schedules through EventBridge Scheduler and codified the changes in Terraform so they survived the next deploy
Measurable result
- Material
- Recurring AWS spend cut
- Scale-to-zero
- Scheduled on bursty workloads
- 0 rewrites
- Application code unchanged
Architecture or technologies
- ECS Fargate
- Application Auto Scaling
- EventBridge Scheduler
- Terraform
- CloudWatch
What I would improve next
- Extend scheduled scaling to additional services as usage patterns are validated
- Add cost allocation tags per environment so finance can trace savings month over month
- Evaluate Fargate Spot for fault-tolerant batch workloads that don't need scale-to-zero
Request a cost and reliability assessment
If this pattern matches what you're seeing, describe your situation, not a job spec. I'll reply within 48 hours with an honest read.