There are three common ways to run an application in the cloud. Each trades control against convenience differently, and their costs behave very differently as traffic grows.
- VPS — a virtual machine you manage. Fixed monthly price, full control.
- PaaS (platform as a service) — you push code; the platform builds, runs and scales it. Examples: Heroku-style platforms, Render, Fly.io, Railway, Google App Engine.
- Serverless functions — you deploy functions that run per request; you pay per execution. Examples: AWS Lambda, Cloudflare Workers, Vercel/Netlify functions.
Side by side
| VPS | PaaS | Serverless functions | |
|---|---|---|---|
| You manage | OS, runtime, web server, security, scaling | Your code and config | Your code |
| Pricing | Fixed per month | Per instance/container, plus add-ons | Per request and compute time |
| Cost at low traffic | Low, fixed | Low to moderate | Very low (often free tier) |
| Cost at steady high traffic | Lowest per request | Moderate to high | Can become high |
| Scaling | Manual (resize, add servers) | Easy (more instances) | Automatic, near-instant |
| Long-running processes, WebSockets, background workers | Yes | Yes | Limited (timeouts, statelessness) |
| Custom software / OS access | Anything | Limited to the platform | Very limited |
| Cold starts | None | Possible on scale-to-zero | Possible |
| Lock-in | Lowest | Medium | Highest (platform-specific APIs) |
How the costs behave
The real difference is the shape of the cost curve.
- VPS: flat. A server that costs the same whether it serves 10 or 10 million requests a month, until you need a bigger one. Idle capacity is “wasted”, but cheap.
- PaaS: steps. Each additional instance or larger instance size adds a fixed amount; managed databases and add-ons are often the biggest line items.
- Serverless: linear with usage. Nearly free when idle, but every request costs something. At sustained high traffic, bills can exceed an equivalent server by a large factor. Egress bandwidth and attached services (API gateways, databases) add up too.
A simple rule: spiky and small → serverless; steady and substantial → VPS; team without ops time → PaaS.
Hidden costs to include
- Your time. A VPS needs updates, backups, monitoring and security work. Budget a few hours a month — or automate it (see VPS maintenance).
- Bandwidth/egress. Many platforms charge per GB out; VPS plans usually include a large allowance.
- Databases. Managed databases on PaaS/serverless platforms are convenient but often the most expensive part; on a VPS you can run PostgreSQL or MariaDB yourself.
- Observability. Logs and metrics may be billed separately on managed platforms.
Which workloads fit where
A VPS is a great fit for:
- WordPress and other CMS sites
- APIs and web apps with steady traffic
- Anything needing WebSockets, long-running jobs or background workers
- Databases, Redis, search engines
- Self-hosted tools (Git, CI runners, analytics, AI models)
- Game servers, VPNs, bots
- Predictable budgets
Serverless fits:
- Webhooks, scheduled jobs, light APIs with irregular traffic
- Edge logic (redirects, auth checks, A/B tests)
- Prototypes with near-zero traffic
PaaS fits:
- Small teams that want git-push deploys without managing servers
- Apps that need easy horizontal scaling and preview environments
Mixing them
Many teams combine models: the main app and database on a VPS, a CDN and edge functions in front, and serverless for occasional tasks. Tools like Coolify, Dokku or CapRover even give you a PaaS-like workflow on your own VPS — git push to deploy, with the VPS’s fixed pricing.
Summary
Choose a VPS for control and predictable cost at steady load, PaaS for convenience when you’d rather not manage servers, and serverless for spiky, event-driven work. If you go the VPS route, our KVM VPS plans and Docker VPS setup are good starting points; see deploying full-stack projects on a VPS for a workflow.