What Self-Hosting Actually Costs vs Vercel and Heroku
31 Oct 2025A small app on Vercel or Heroku looks free right up until it isn’t. Then the bill jumps in a way that feels disconnected from what you actually shipped. Self-hosting trades that unpredictability for a flat, boring cost — but only if you’re honest about what you’re also buying: your own time.
What “small app” means here
For this comparison: a Next.js or Node app, a Postgres database, some background jobs, moderate traffic (a few hundred thousand requests a month, not viral-scale). The kind of thing a solo developer or small team runs in production without a dedicated infra person.
The managed platform bill
Vercel and Heroku both have generous-looking free or low tiers, and both charge you for the things that scale with real usage: compute time, bandwidth, build minutes, and — this is the one that surprises people — serverless function invocations and database connections. A hobby project on the free tier is genuinely free. The same app once it has real users, a cron job, and a production database usually lands somewhere in the $50-$200+/month range once you add a managed Postgres add-on, because the database is priced separately and scales with storage and connection limits, not just usage.
The number that actually matters isn’t the sticker price — it’s that it moves. A traffic spike, a slow query that holds connections open, an accidental infinite loop in a serverless function: any of these can multiply the bill in a single day, and you often don’t find out until the invoice.
The self-hosted bill
A VPS sized to run the same app comfortably — 2-4 vCPUs, 4-8GB RAM — costs a small, fixed amount a month regardless of traffic within that box’s capacity. You’re paying for the box, not the request. Add a few dollars for backups or object storage if you need it. The total is predictable and it does not change because someone hit refresh a thousand times.
| Managed PaaS | Self-hosted VPS | |
|---|---|---|
| Cost shape | Scales with usage, can spike | Flat, fixed monthly |
| Setup time | Minutes | A few hours, once |
| Ongoing ops | None | You patch, monitor, back up |
| Scaling past one box | Automatic, billed | Manual, your job |
| Cold starts / sleep | Possible on serverless tiers | None — it’s just a process |
What you’re actually paying for with time
This is the part cost calculators skip. Self-hosting means you own:
- OS patching and security updates
- Uptime monitoring and restart-on-crash logic
- SSL renewal (mostly automated now, but you set it up)
- Database backups and, worse, restore testing
- Scaling decisions when the one box runs out of headroom
None of this is hard with modern tools — a Dokploy or Coolify install gets you most of the PaaS convenience on top of a VPS — but it’s not zero. Budget a few hours a month for maintenance, more in the first week while you get the setup right.
Where each one wins
Managed platforms win when your team’s time is worth more than the bill, when traffic is spiky and unpredictable, or when you need global edge deployment you’re not going to replicate on one VPS. Self-hosting wins when your traffic is steady, your app is a standard web-app-plus-database shape, and you’d rather spend a fixed $20-40/month than an unpredictable $150.
The honest rule of thumb: if you’re already comfortable SSHing into a server and reading logs, self-hosting saves real money on a steady-traffic app and the ops overhead is smaller than people assume. If you’re not, the time you’d spend learning it costs more than the difference in the bill — at least for the first few months.