Every time someone reaches for serverless to build a simple backend, a container dies inside me.
Serverless promises simplicity, scalability, and zero maintenance, but in reality, it brings time limits, vendor lock-in, surprise billing, and complexity.
Serverless deployment means handling individual functions on a cloud platform without managing the server directly.
However, serverless comes with strict runtime limits, zero state retention, cold starts, opaque debugging, vendor-specific quirks, and a lot of YAML.
Compared to serverless, containers offer simplicity, power, and stability with features like state retention, no time limits, and easy debugging.
Serverless pricing is designed to confuse users with per-invocation, memory, duration, and data transfer costs, leading to unpredictability and hidden charges.
Containers excel in predictability, observability, resource limits, and scalability without the complexity and unpredictability of serverless pricing.
Serverless forces statelessness, creating dependencies on external services, while containers allow in-memory caching, local file storage, and long-lived connections.
Containers offer more control and understanding of the system without the need to manage servers directly.
In conclusion, while serverless has its niche for specific tasks, containers remain a more reliable, transparent, and cost-effective choice for building real applications.