Serverless vs Traditional Hosting: Real Cost Comparison for Startups
The hosting conversation in startup circles tends to split into two camps: the serverless evangelists who think everyone should be on Vercel and Cloudflare, and the ops veterans who insist you are wasting money unless you manage your own servers. Both sides are wrong in the general case and right in specific ones.
We have deployed products on Vercel, Cloudflare Workers, Railway, DigitalOcean, and AWS. Some of those products handle hundreds of requests per day. Others handle hundreds of thousands. The right hosting choice depends on your traffic patterns, your team’s ops capacity, and your actual budget — not on what works for Netflix or what got the most upvotes on Hacker News.
This is a real cost comparison based on our actual experience, with numbers you can use to make decisions.
Defining the Typical Startup SaaS
To make this comparison concrete, let us define a reference application. This is a composite of the products we have built — something like a simplified LancerSpace or Trackelio:
- SvelteKit or Next.js web application with server-side rendering
- PostgreSQL database (managed)
- File storage for user uploads (avatars, documents)
- Background jobs for email sending, webhooks, reports
- Three environments: development, staging, production
We will compare costs at three traffic levels:
- Low: 10,000 monthly active users, 500K requests/month
- Medium: 50,000 MAU, 3M requests/month
- High: 200,000 MAU, 15M requests/month
Vercel
Vercel is where most modern frontend frameworks land by default. Excellent developer experience, automatic previews for every PR, and seamless integration with Next.js and other frameworks. We use it for several production deployments including our own website.
Pricing breakdown:
The Pro plan at $20/month per team member is the baseline for any production application. The free tier has bandwidth and execution limits that production apps hit quickly.
| Traffic level | Compute | Bandwidth | Storage | Database (Vercel Postgres) | Monthly total |
|---|---|---|---|---|---|
| Low (500K req) | $20 (Pro plan) | Included | Included | $20 (basic) | ~$40 |
| Medium (3M req) | $20 + ~$40 overage | ~$20 overage | ~$10 | $60 (pro) | ~$150 |
| High (15M req) | $20 + ~$300 overage | ~$100 overage | ~$30 | $60 + overage | ~$510+ |
The thing about Vercel pricing is that it is hard to predict. Serverless functions are billed by execution time (GB-hours), bandwidth is billed per GB, and Edge Functions have separate limits. At low traffic, it is fantastic — you get a lot for $20/month. At high traffic, the per-unit costs add up quickly, and you can get surprised by your bill.
Where Vercel shines: marketing sites, documentation, blogs, and low-to-medium traffic SaaS applications. The developer experience is worth paying for at this scale.
Where it gets expensive: high-traffic applications with lots of server-side rendering or API routes. Once you are consistently burning through compute and bandwidth, a fixed-cost server is cheaper.

Cloudflare Workers
Cloudflare Workers runs your code at the edge — over 300 data centers worldwide. Response times are phenomenal because the code runs physically close to the user. The pricing model is request-based rather than compute-time-based, which makes it more predictable.
Pricing breakdown:
The Workers Paid plan is $5/month and includes 10 million requests. Beyond that, it is $0.30 per million requests. D1 (their SQLite-based database) starts free and scales per-row-read.
| Traffic level | Workers | D1 Database | R2 Storage | Monthly total |
|---|---|---|---|---|
| Low (500K req) | $5 | ~$0 (free tier) | ~$0 (free tier) | ~$5 |
| Medium (3M req) | $5 | ~$5 | ~$2 | ~$12 |
| High (15M req) | $5 + $1.50 | ~$25 | ~$10 | ~$42 |
The numbers are dramatically lower than any other option, and they are real. We have deployed projects on Cloudflare Workers that handle millions of requests for under $20/month.
The catch: Workers have constraints. The runtime is V8 isolates, not Node.js. Many npm packages do not work. You cannot use Node.js-specific APIs without compatibility flags, and even then, coverage is incomplete. D1 is SQLite-based, not PostgreSQL, which means no advanced features like full-text search, JSONB operators, or RLS policies that we rely on with Supabase. If your stack fits within these constraints, the cost savings are enormous. If it does not, you will spend more time on workarounds than you save on hosting.
Where Cloudflare shines: API endpoints, static sites with edge logic, real-time applications, and any workload that fits the Workers runtime model.
Where it struggles: complex server-side applications with heavy Node.js dependencies, anything that needs a PostgreSQL database.
Railway
Railway is the middle ground we wish existed five years ago. You get the simplicity of a PaaS — push code, it deploys — with the flexibility of running actual containers. You can deploy a Node.js app, a PostgreSQL database, a Redis instance, and a cron worker all in the same project.
Pricing breakdown:
Railway charges based on resource usage: vCPU-hours and memory GB-hours. A small application typically runs on 0.5 vCPU and 512MB RAM.
| Traffic level | App service | PostgreSQL | Redis (optional) | Monthly total |
|---|---|---|---|---|
| Low (500K req) | ~$5 | ~$5 | $0 | ~$10 |
| Medium (3M req) | ~$15 | ~$15 | ~$5 | ~$35 |
| High (15M req) | ~$50 | ~$40 | ~$10 | ~$100 |
Railway’s pricing is usage-based but predictable because you can see resource consumption in real-time and set spending caps. Unlike serverless platforms where a traffic spike can blow up your bill, Railway charges for the resources your containers actually use.
Where Railway shines: full-stack applications that need a real server, background workers, database, and cache in one place. The developer experience is close to Vercel-level, but you get actual containers you can SSH into and debug.
Where it is limited: no edge computing, no built-in CDN (you pair it with Cloudflare), and scaling is vertical — you increase the resources of your container rather than spawning new instances automatically.

DigitalOcean
DigitalOcean is the classic VPS provider. You get a virtual machine with known specs for a fixed monthly price. No surprises on the bill, full control over the environment, and you manage everything yourself.
Pricing breakdown:
| Traffic level | Droplet(s) | Managed PostgreSQL | Spaces (storage) | Monthly total |
|---|---|---|---|---|
| Low (500K req) | $12 (basic) | $15 | ~$5 | ~$32 |
| Medium (3M req) | $24 (2 vCPU) | $30 | ~$10 | ~$64 |
| High (15M req) | $96 (2x dedicated) | $60 | ~$15 | ~$171 |
The total cost at high traffic is a third of what Vercel charges. But you are paying for that difference with your time. You manage updates, security patches, SSL certificates, process managers, deployment pipelines, log aggregation, and monitoring. For a team of four engineers with products to build, that operational overhead is a real cost that does not show up in the hosting bill.
Where DigitalOcean shines: production workloads where you have a dedicated DevOps person (or a team member comfortable with server management) and you want predictable costs at scale.
Where it hurts: small teams without ops experience. The first time your Droplet runs out of disk space at 2 AM because log rotation was not configured, you will wish you had paid the Vercel premium.
AWS
AWS is the everything store. Whatever you need, it exists somewhere in the AWS console, buried under three layers of IAM policies and a pricing calculator that requires its own pricing calculator.
For a comparable setup (ECS Fargate for the app, RDS for PostgreSQL, S3 for storage, CloudFront for CDN):
| Traffic level | Fargate | RDS PostgreSQL | S3 + CloudFront | Monthly total |
|---|---|---|---|---|
| Low (500K req) | ~$30 | ~$30 | ~$5 | ~$65 |
| Medium (3M req) | ~$60 | ~$60 | ~$15 | ~$135 |
| High (15M req) | ~$200 | ~$120 | ~$50 | ~$370 |
AWS is rarely the cheapest option at any traffic level, and the operational complexity is the highest of any platform on this list. The advantage is flexibility, enterprise compliance certifications, and the ability to scale to effectively unlimited traffic. If you are a startup, you probably do not need that yet.
Where AWS shines: enterprise customers who require it, very high scale, specific services with no good alternatives (SQS, DynamoDB, Bedrock).
Where it is overkill: any startup under $5M ARR that does not have a specific technical requirement only AWS can fulfill.

Our Decision Framework
After deploying products across all of these platforms, here is how we decide for new projects:
Start with Vercel or Cloudflare if you are building a content-heavy site, a marketing page, or a low-traffic MVP. The developer experience pays for itself in iteration speed during the critical early months. We cover the tradeoffs of different stacks for early-stage products in our post on how long it takes to build a web app.
Use Railway if you need a real server environment — background jobs, WebSockets, cron tasks — and you want PaaS simplicity. This is our go-to for SaaS products that outgrow serverless constraints.
Move to DigitalOcean or similar VPS when your monthly bill consistently exceeds $200 on a PaaS platform and you have the team capacity to manage infrastructure. The break-even point is usually around $150-250/month — below that, the time cost of self-management exceeds the hosting savings.
Use AWS when a client requires it or when you need specific AWS-only services. Not as a default.
For our own products, we pair Vercel or Cloudflare (for the frontend and edge logic) with Supabase (for PostgreSQL, auth, and storage). This combination gives us excellent performance, predictable costs at moderate traffic, and zero infrastructure management. SpotsMexico, JustTheRip, and MindHyv all run on variations of this stack.
The Costs Nobody Talks About
The monthly hosting bill is the most visible cost, but it is not the most important one. The hidden costs are:
Developer time. A platform that saves $100/month but costs 10 hours of ops work per month is a bad deal if your engineers bill at $100/hour. Conversely, a platform that costs $200/month more but eliminates all ops work is a bargain.
Incident response. When your managed Vercel deployment goes down, Vercel fixes it. When your DigitalOcean Droplet goes down, you fix it. At 2 AM. On a Saturday.
Migration cost. Moving from one platform to another takes days to weeks of engineering time. Choose a platform you can grow with for at least 12-18 months, rather than optimizing for the cheapest option right now.
The best hosting decision is the one that lets your team focus on building the product. For most startups, that means paying a premium for managed infrastructure and revisiting the decision when your scale genuinely demands it.
If you are trying to figure out the right hosting setup for your product, reach out at hello@threshline.com. We will give you an honest recommendation based on your actual requirements, not what is trending on Twitter.