When is serverless the wrong choice?
More often than the marketing suggests. Serverless genuinely removes operational work and introduces a specific set of constraints — and choosing it for a workload that fits badly produces higher costs and worse latency than a server would.
Where it genuinely wins: spiky or unpredictable traffic; workloads that are idle much of the time; event-driven glue between services; scheduled jobs; and small teams with no operational capacity, where not running servers is worth real money.
Where it fits badly:
Steady high-volume traffic. Per-invocation pricing that is excellent at low volume becomes expensive when running continuously. At sustained load, a reserved instance is frequently cheaper by a wide margin — the crossover point arrives sooner than people expect.
Latency-sensitive paths. Cold starts — the delay when a new instance must be initialised — range from tens of milliseconds to several seconds depending on runtime and dependencies. Mitigations exist, and provisioned concurrency is essentially paying for a server.
Long-running work. Platforms impose execution time limits, so batch processing, large file handling and long-lived connections fit awkwardly or not at all.
Heavy database use. Each concurrent invocation may open its own connection, and a traffic spike exhausts a relational database's connection limit — a well-known failure mode requiring a connection proxy or a different data store.
Large dependencies or specialist hardware, where package size limits and lack of GPU support bite.
Stateful or in-memory-heavy work, since instances are ephemeral and share nothing reliably.
Chatty architectures, where a request fans out across many functions and each hop adds latency and cost.
The costs that are underestimated: local development and testing are harder; debugging distributed invocations requires real observability investment; vendor lock-in is deeper than with containers; and per-request charges for adjacent services frequently exceed the compute bill.
The honest framing. Serverless is not cheaper or simpler in general. It moves cost and complexity — from operations to architecture, from fixed to variable, and from your control to the provider's.