A small production web app costs roughly $4.50 to $6 per month on a VPS and commonly $60 to $120 per month on a serverless stack, and the difference is almost never the compute. It is the managed services that serverless architectures assume and a VPS lets you run yourself. Here is where the money actually goes.

The compute line looks fine

Start with the number people compare, because on its own it does not explain much.

Hetzner's CX22 gives you 2 vCPU, 4GB RAM, 40GB SSD, and 20TB of bandwidth for around $4.50 a month. DigitalOcean's entry Droplet starts at $6. Vercel's Pro plan starts at $20 a month base. AWS Lambda charges per invocation and per gigabyte-second, which at 128MB and 200ms average duration is genuinely cheap for low traffic.

If you stopped there, serverless looks like it costs four times as much rather than ten. The compute is not the problem.

The line items nobody puts in the comparison

Serverless functions are stateless by design. That is the whole architectural premise, and it means everything that holds state has to live somewhere else, billed separately.

What you needServerlessVPS
DatabaseManaged Postgres, roughly $15 to $50/monthPostgres on the box, $0
Cache / queueManaged Redis, roughly $10 to $30/monthRedis on the box, $0
File storageObject storage, billed per GB and per requestLocal disk, included
Compute$20/month base plus usage$4.50 to $6/month total
Realistic monthly total$60 to $120$5 to $10

That is the whole story. A VPS with 4GB of RAM runs Postgres, Redis, your Node process, and Nginx simultaneously without breaking a sweat, and all four are included in the $4.50. On serverless each one is a line item with its own base charge, and the base charges are what get you rather than the usage.

The bandwidth asymmetry deserves its own mention. Hetzner's 20TB of included transfer versus per-gigabyte egress pricing on the major clouds is a difference that only shows up once you serve real traffic, and by then you have built around it.

What you actually pay for on a VPS

Time, and it is not a small amount the first time. Nobody hands you a running app. You install Node, configure a process manager like PM2 so the app restarts when it crashes, set up Nginx as a reverse proxy, obtain and renew TLS certificates, and build some deployment automation so you are not copying files over SSH by hand.

That is maybe an afternoon the first time and twenty minutes once you have done it before. The ongoing cost is real but smaller than people expect: security updates, monitoring that the disk is not full, and being the person who gets paged when the box goes down.

Serverless genuinely removes all of that. Whether removing it is worth $70 a month depends entirely on what your time is worth and whether you enjoy any of it.

Where serverless actually wins

Spiky and unpredictable traffic. This is the case the architecture was designed for and it still holds. If your load is near zero most of the time and occasionally enormous, paying per invocation beats paying for a box sized for the peak. A VPS sized for your worst hour is idle and costing money for the other 23.

Very low traffic side projects. Under the free tiers, serverless costs nothing while a VPS costs $5 a month regardless. Ten dormant projects is $50 a month on VPSes and often zero on serverless.

Teams without operations capacity. A three person startup where nobody wants to own a server has a legitimate reason to pay the premium, and I would not argue them out of it.

Global edge distribution. Getting genuinely low latency in multiple regions from a single VPS is not really possible. That is a real capability, not just convenience.

The hybrid most people land on

In practice a lot of teams end up splitting it, and this is what I would default to now: static frontend and edge functions on Cloudflare or Vercel for the speed and global distribution, backend and database on a VPS for predictable cost.

You get CDN performance on the part that benefits from it and flat pricing on the part that would otherwise be metered per query. The main cost is one more deploy target to think about, plus keeping CORS and auth working across the boundary.

How I would decide

Ask what your traffic looks like at the trough rather than the peak. If your app is doing meaningful work most hours of the day, a VPS is cheaper by a large multiple and the operational cost is a known quantity. If it sits idle and occasionally spikes, serverless pricing is genuinely matched to that shape.

Then ask, honestly, whether you will do the maintenance. A VPS that never gets security updates is not a $4.50 solution, it is a liability you are pretending is a savings. Given the state of software supply chain attacks right now, an unpatched box you forgot about is a worse outcome than an overpriced managed service.

The version of this I actually believe: most small production apps are paying serverless prices for VPS-shaped workloads, because the defaults pushed them there and nobody re-examined it once traffic became steady. That is worth an hour of arithmetic on your own bill.

Reference: Hetzner Cloud pricing, Vercel pricing, AWS Lambda pricing.

Previous Post Next Post