Why I moved away from Serverless for a growing SaaS product

When we kicked off a client’s SaaS platform, cost and scalability were top priorities. So we chose:
🛠 AWS Lambda + API Gateway + Serverless Framework
It was perfect… at first.
💡 The problem we were solving:
Build a scalable, low-cost backend fast, without overcommitting infrastructure. Serverless seemed ideal:
– Pay-per-use
– Easy to get individual endpoints live
– Auto-scaled out of the box
✅ What worked well:
– Lightning-fast deployments of single functions
– Easy to prototype and go live quickly
– Initial cost savings for a bootstrapped product
🚫 But what didn’t scale:
– Managing dozens of individual Lambda functions became a headache
– Debugging & testing end-to-end flows was painful
– No shared context, every function was isolated
– It became harder to reason about the system’s behavior
– Developer experience suffered as the complexity grew
🧱 The shift: NestJS Microservices on Kubernetes (Amazon EKS)
As the product matured, we transitioned to a NestJS microservices architecture, all codebase in one monorepo, better structure, cleaner DI, and shared modules.
🟢 Developer experience improved significantly
🟢 Easier testing, better observability
🟢 More predictable deployment pipeline
🟢 Scalable with multiple deployment targets (EKS, App Runner, ECS/Fargate)
📌 My takeaway:
Serverless can be great for early-stage products or low-complexity APIs.
But once your system grows in complexity (workflows, team size, observability ) consider switching to a structured framework like NestJS and a container-based deployment.
If you’re exploring serverless vs containers for your product, happy to share what worked (and didn’t). DM or drop a comment!