How we cut our AWS bill by 70% without breaking prod
A startup invoice that doubled month over month, a serverless stack that was over-provisioned everywhere, and the unglamorous fixes that actually moved the number.
The bill arrived and it had a comma in a place it didn't used to. At Panoculon Labs we'd shipped fast on a serverless AWS stack — Cognito, Lambda, DynamoDB, API Gateway, WebSockets — and fast had quietly become expensive. Here's the unglamorous work that took 70% off the top.
Measure before you cut
Cost Explorer grouped by service is the first stop, but the real signal was per-Lambda cost. Two functions were 60% of compute spend, and both were over-allocated memory "just in case."
- Right-sized Lambda memory using actual p95 from logs, not gut feel.
- Killed idle provisioned concurrency on functions that didn't need warm starts.
- Moved chatty read paths off DynamoDB on-demand onto a cheaper access pattern.
The migration that mattered
The single biggest win was migrating the real-time meeting layer off the AWS WebSocket + Lambda combo onto Firebase, which cut latency roughly in half _and_ removed a per-message billing line that scaled with our most active users. Sometimes the cheapest infrastructure is the one you delete.
Every architecture decision is a pricing decision wearing a technical costume.
What stuck
Cost reviews are now part of the deploy checklist, not a quarterly panic. The number stayed down because the habit stayed up.