Explainers

What Serverless Actually Means for a Small Product (and Where It Breaks Down)


Serverless architecture means you write code that runs in response to events, and someone else's infrastructure handles everything about how that code runs, including provisioning, scaling, and keeping the lights on. That's the whole idea. The rest is tradeoffs.

Why It Sounds Perfect for a Small Product

If you're running a lean product with one or two people covering the whole stack, the appeal is obvious. You don't pay for idle compute. You don't manage servers. You don't wake up at 2am because a box ran out of memory. For a product with unpredictable or spiky traffic, those are real, concrete wins, not marketing copy.

The unit economics are genuinely different from traditional hosting. A VPS or a dedicated server charges you for capacity whether it's used or not. Serverless functions charge you per invocation and per duration. If your product sits quiet most of the day and spikes hard when something happens, that pricing model fits. You're essentially renting compute by the millisecond instead of by the month.

There's also the operational surface area argument. The less infrastructure you're responsible for, the more time you spend on the actual product. For a solo founder or a very small team, that's not a minor point. It's often the difference between shipping and not shipping.

What Serverless Architecture Actually Looks Like in Practice

In a typical serverless setup for a small product, you'd have a few discrete functions handling API routes or background jobs, a managed database (often a serverless-compatible one like PlanetScale, Neon or Supabase), and a CDN-backed frontend. The whole thing can be deployed, scaled, and billed with almost no manual intervention. Platforms like Vercel, Netlify, and AWS Lambda have made this kind of setup accessible well beyond the big engineering teams that pioneered it.

The deployment story is particularly good. Push to main, your functions deploy in seconds, you get preview environments automatically, and rollback is a click. For iterating fast on a product that's still finding its shape, that workflow has real value.

If your product has a small number of discrete, stateless operations (form submissions, webhooks, API calls, background processing), serverless is very likely the right default. The problems come when you push it beyond that shape.

Where Serverless Breaks Down

This is where most explainers stop being useful, so let's go deeper.

Cold Starts Are a Real User Experience Problem

When a serverless function hasn't been invoked recently, the platform has to spin up a new execution environment. That takes time, sometimes a few hundred milliseconds, sometimes over a second depending on the runtime and the platform. For a background job that nobody sees, that's fine. For the first request a user makes when they open your product, it's a noticeable, frustrating delay.

Edge runtimes (where your code runs closer to the user geographically) reduce this problem significantly, but they come with their own constraint: you're working in a stripped-down JavaScript environment, not a full Node.js runtime. Many libraries simply don't work at the edge. If your function needs to connect to a database using a driver that relies on Node internals, you'll hit that wall quickly.

Statelessness Is a Design Constraint, Not Just a Feature

Serverless functions are stateless by design. Each invocation is isolated. That's what makes them scale so well, but it also means you can't hold anything in memory between calls. If your architecture requires shared in-memory state, a long-running WebSocket connection, or a persistent background process, serverless either can't do it or forces you into workarounds that end up more complex than the alternative.

Real-time features are the classic example. Chat, live collaboration, anything that needs a persistent connection between server and client. You can route around this with managed WebSocket services or pub/sub layers, but you've now added cost and complexity. At some point, a small containerised process or a lightweight VPS is simply the more honest solution.

The Cost Curve Can Invert at Scale

The pay-per-invocation model that's so cheap at low volume can become expensive as traffic grows. Many founders who started on serverless have reached a threshold where a single managed server or a small Kubernetes setup would cost less monthly than their function invocations and egress fees. It's not a reason to avoid serverless early, but it is a reason to understand your cost model before you're deeply committed to it.

Watch egress fees carefully. Serverless platforms often charge for data leaving their network, and that can add up fast for products that serve media, export large datasets, or talk frequently to external APIs.

Observability and Debugging Are Harder Than They Should Be

When something breaks in a traditional server environment, you SSH in, look at logs, maybe attach a debugger. The mental model is straightforward. With serverless, a failed invocation can be harder to trace. Logs are distributed across function instances. Execution contexts are ephemeral. Reproducing a specific failure locally can be genuinely difficult because your local environment doesn't match the execution environment precisely.

Good tooling (Sentry, Axiom, Datadog) helps considerably, but it's another layer to set up and maintain, and another monthly bill. For a solo founder already juggling everything, that overhead is worth factoring in before assuming serverless means fewer things to manage.

Serverless vs Traditional Hosting: The Honest Comparison

ConsiderationServerlessTraditional Hosting (VPS/Container)
Ops overhead at launchVery lowModerate to high
Cost at low trafficOften near zeroFixed monthly cost
Cost at high trafficCan escalate quicklyMore predictable
Cold start latencyReal problem, mitigableNot a factor
Long-running processesNot supported nativelyStraightforward
Real-time connectionsRequires workaroundsStraightforward
Local debuggingTrickyFamiliar workflow
Scaling to zeroAutomaticManual or platform-managed

When to Use Serverless, and When to Reach for Something Else

Serverless is a strong default for products that are request-response in shape: APIs, webhooks, form handlers, scheduled jobs, lightweight data processing. If your product fits that shape and you're optimising for speed of iteration and low ops burden, it's hard to argue against it at the start.

Reach for something else when your product requires persistent connections, heavy background computation, tight latency requirements on cold paths, or when you have a predictable, consistently high volume where fixed-cost infrastructure becomes cheaper. A small Fly.io or Render deployment, a single well-spec'd VPS, or a containerised setup on Railway can all be operated with low overhead and give you considerably more flexibility at the application layer.

The mistake I see most often isn't choosing serverless, it's treating the choice as permanent. Your architecture should evolve with your product. Start serverless if the shape fits, instrument your costs and latency from day one, and make the migration decision with data rather than regret.

A hybrid approach is underrated. Serverless functions for stateless API routes, a small persistent process for anything that needs long-running state or WebSockets. You don't have to pick one model for the whole product.

The Non-Obvious Implication Most People Skip

Serverless shifts complexity, it doesn't remove it. The operational complexity of managing servers moves to coordination complexity: managing external services, understanding billing models, wiring together function invocations that were previously in-process calls. For a founder who isn't deeply familiar with distributed systems, that trade can be a good one. But going in with eyes open matters. The abstractions are leaky, and at some point you will need to understand what's underneath them.

The products where I've seen serverless genuinely shine are ones where the team made a deliberate choice based on the product's actual shape, not because it was fashionable. That's the decision-making posture worth cultivating.

Is serverless good for an early-stage product with unpredictable traffic?

Yes, in most cases. The pay-per-invocation model means you're not paying for idle capacity, and the low ops overhead lets a small team focus on the product rather than infrastructure. The main caveat is cold starts: if your product needs consistent low latency on every request, test your cold start behaviour on your chosen platform before committing.

What are the biggest serverless limitations for small teams?

The three that matter most in practice are: cold start latency affecting user experience, the inability to run persistent processes or stateful connections natively, and debugging complexity when things go wrong. All three are manageable, but none of them disappear entirely.

At what point does serverless become more expensive than a traditional server?

This depends heavily on your invocation volume, duration, and egress. The general pattern is that serverless is cost-efficient at low-to-medium traffic and can become more expensive than a comparable VPS or container setup at sustained high volume. Monitor your costs from day one rather than assuming the early bill predicts the future one.

Can you mix serverless and traditional hosting in the same product?

Absolutely, and it's often the right answer. A common approach is using serverless functions for stateless API routes and webhooks while running a small persistent service for anything that needs long-lived connections or background computation. Platforms like Fly.io, Render and Railway make the persistent side cheap and easy to operate.

Which serverless platforms are most practical for a UK-based small product?

Vercel and Netlify are popular for frontend-adjacent workloads and deploy from Git with minimal configuration. AWS Lambda gives you more control and is widely used in production at scale. Cloudflare Workers runs at the edge with very low latency but a constrained runtime. All are accessible to UK-based teams with no meaningful geographic restriction, though check data residency requirements if your product handles personal data subject to UK GDPR.