CloudJun 20263 min read

Custom Containers vs Serverless Computing

Custom containers give you control and predictable cost at scale; serverless gives you speed-to-ship and zero idle bill. The right pick depends on traffic shape, not vibes — and one of these wins for most teams starting out.

The short answer

Serverless Computing over Custom Containers for most cases. For most teams, the operational tax of running containers — patching base images, tuning autoscalers, paying for idle capacity, owning the 3am pager — buys.

  • Pick Custom Containers if run sustained high-utilization traffic, need full control over the runtime and networking, have workloads that exceed serverless timeouts, or your cloud bill is dominated by per-invocation pricing at scale
  • Pick Serverless Computing if shipping a new product, have spiky or unpredictable traffic, want to pay nothing for idle, and would rather your engineers write features than babysit autoscalers and patch base images
  • Also consider: Container-as-serverless hybrids like AWS Fargate, Google Cloud Run, and Azure Container Apps — they let you ship a container without owning a cluster, which is the right answer more often than either purist camp admits.

— Nice Pick, opinionated tool recommendations

What you're actually choosing between

Custom containers mean you package your app into an image and run it on infrastructure you provision and scale — EC2, a Kubernetes cluster, ECS. You own the runtime, the OS patches, the autoscaling policy, and the idle capacity you pay for whether or not anyone shows up. Serverless means you hand a function or a request handler to the platform and it runs your code on demand, scaling from zero to thousands and back, billing per invocation and execution time. The honest framing: containers are control plus responsibility; serverless is convenience plus constraints. Everyone pretends this is a religious war. It isn't. It's a question of where your traffic lives on the utilization curve and how much operational surface you want to own. Pick based on that, not on what trended on Hacker News last week.

Cost: idle is the silent killer

Containers bill for provisioned capacity. That box runs at 3am when nobody's awake, and you pay for it. At low or spiky utilization, you're renting an empty restaurant. Serverless bills per request and execution time — zero traffic, zero bill — which is brutal in your favor for new products, internal tools, and bursty workloads. The plot twist everyone discovers too late: at sustained high volume, serverless per-invocation pricing crosses over and gets expensive, sometimes dramatically. A service pinned at 70% CPU 24/7 is cheaper on a reserved container than on Lambda, full stop. So the rule is unglamorous: serverless wins below the crossover, containers win above it. If you can't say where your crossover is, you're serverless — because you haven't earned the container bill yet.

Operations: who owns the pager

This is where containers quietly bleed money that never shows up on the cloud invoice. Someone patches the base image. Someone tunes the horizontal pod autoscaler. Someone debugs why the cluster OOM-killed a pod at 2am. Kubernetes is a full-time job wearing a YAML costume, and pretending otherwise is how startups burn two engineers on infrastructure that serves four customers. Serverless deletes most of that surface — no servers to patch, no autoscaler to tune, scaling and availability are the platform's problem. You trade it for cold starts, execution timeouts, and vendor-shaped runtime limits. That's a real trade, not a free lunch. But for a small team, the operational tax of containers is the single most underpriced line item in the decision, and it almost always favors going serverless until headcount and scale justify owning the floor.

Constraints and lock-in: read the fine print

Serverless wins on convenience by handing you a box you can't fully open. Cold starts add latency on the first request after idle — fine for an API, fatal for a latency-SLA trading path. Execution timeouts (often around 15 minutes) make long-running jobs a non-starter. You inherit the platform's language runtimes, memory ceilings, and networking model. Containers give you all of that back: any runtime, any timeout, custom networking, GPUs, persistent connections, your choice of base image. The lock-in story is more even than the purists claim — a Dockerfile is portable across clouds, while a function wired to a specific event model is stickier. But don't overweight portability you'll never exercise. Most teams never migrate clouds. Pick for the constraint that will actually bite you: if cold starts or timeouts break your use case, that's your decisive reason to run containers — and a good one.

Quick Comparison

FactorCustom ContainersServerless Computing
Cost at low/spiky trafficPay for idle provisioned capacity 24/7Scales to zero — no traffic, no bill
Cost at sustained high utilizationReserved capacity is cheaper past the crossoverPer-invocation pricing gets expensive at volume
Operational burdenYou own patching, autoscaling, the cluster, the pagerPlatform owns scaling, availability, and host patching
Runtime control & long jobsAny runtime, no timeout, custom networking, GPUsCold starts, ~15min timeout, platform-shaped limits
Speed to ship a new productStand up infra, autoscaler, CI/CD before feature oneDeploy a handler and go; infra is the platform's job

The Verdict

Use Custom Containers if: You run sustained high-utilization traffic, need full control over the runtime and networking, have workloads that exceed serverless timeouts, or your cloud bill is dominated by per-invocation pricing at scale.

Use Serverless Computing if: You're shipping a new product, have spiky or unpredictable traffic, want to pay nothing for idle, and would rather your engineers write features than babysit autoscalers and patch base images.

Consider: Container-as-serverless hybrids like AWS Fargate, Google Cloud Run, and Azure Container Apps — they let you ship a container without owning a cluster, which is the right answer more often than either purist camp admits.

Custom Containers vs Serverless Computing: FAQ

Is Custom Containers or Serverless Computing better?

Serverless Computing is the Nice Pick. For most teams, the operational tax of running containers — patching base images, tuning autoscalers, paying for idle capacity, owning the 3am pager — buys nothing a serverless platform doesn't already give you for free. Serverless wins until you have a measured reason to leave it: sustained high utilization, sub-50ms cold-start intolerance, or a long-running workload that laughs at a 15-minute timeout. Start serverless, graduate to containers when the bill or the constraints force your hand. Defaulting to Kubernetes on day one is resume-driven development, not engineering.

When should you use Custom Containers?

You run sustained high-utilization traffic, need full control over the runtime and networking, have workloads that exceed serverless timeouts, or your cloud bill is dominated by per-invocation pricing at scale.

When should you use Serverless Computing?

You're shipping a new product, have spiky or unpredictable traffic, want to pay nothing for idle, and would rather your engineers write features than babysit autoscalers and patch base images.

What's the main difference between Custom Containers and Serverless Computing?

Custom containers give you control and predictable cost at scale; serverless gives you speed-to-ship and zero idle bill. The right pick depends on traffic shape, not vibes — and one of these wins for most teams starting out.

How do Custom Containers and Serverless Computing compare on cost at low/spiky traffic?

Custom Containers: Pay for idle provisioned capacity 24/7. Serverless Computing: Scales to zero — no traffic, no bill. Serverless Computing wins here.

Are there alternatives to consider beyond Custom Containers and Serverless Computing?

Container-as-serverless hybrids like AWS Fargate, Google Cloud Run, and Azure Container Apps — they let you ship a container without owning a cluster, which is the right answer more often than either purist camp admits.

🧊
The Bottom Line
Serverless Computing wins

For most teams, the operational tax of running containers — patching base images, tuning autoscalers, paying for idle capacity, owning the 3am pager — buys nothing a serverless platform doesn't already give you for free. Serverless wins until you have a measured reason to leave it: sustained high utilization, sub-50ms cold-start intolerance, or a long-running workload that laughs at a 15-minute timeout. Start serverless, graduate to containers when the bill or the constraints force your hand. Defaulting to Kubernetes on day one is resume-driven development, not engineering.

Related Comparisons

Disagree? nice@nicepick.dev