LaunchCost

How to estimate hosting costs for a side-project SaaS

Five cost categories that show up on every founder's first cloud bill — and which ones you almost certainly underestimate.

A close-up overhead of a financial spreadsheet printed on cream paper with a fountain pen across it, warm afternoon light.

Most founders shipping their first SaaS underestimate year-one hosting cost by 2-3x. Not because cloud bills are mysterious — they're not — but because the categories that bite hardest are the ones nobody remembers to budget for. This page walks through all five, in the order they typically show up in your AWS or Vercel bill.

1. Compute — and why “serverless is free” isn't

Compute is the line your eyes go to first, and it's also the one founders most often misread. Three pricing models matter for a year-one SaaS: reserved (you pay for capacity whether you use it or not), on-demand (you pay per hour the instance is running), and serverless (you pay per request and per millisecond of execution).

The trap is the always-on baseline. A typical "I just need a small Postgres and a worker" production setup on AWS is one t4g.small ($12-14/mo) plus one db.t4g.micro RDS ($14-16/mo) plus a NAT gateway you forgot about ($32/mo). You're at $60/month before writing a useful line of code. Vercel's hobby tier looks free but excludes commercial use — once you charge a customer, you're on Pro at $20/seat/month minimum.

Serverless on Cloudflare Workers or AWS Lambda flips the math: $0 idle, then per-invocation pricing. For a side-project SaaS doing under 100k requests/day, the Workers paid plan ($5/mo) is the cheapest production-grade option I've ever budgeted. The catch is cold-start latency on cold endpoints and the cognitive overhead of thinking in functions rather than processes.

Realistic year-one compute range: $300 – $1,200 for a serverless-heavy stack, $700 – $2,400 for a managed-VM stack with a small Postgres and a worker box.

2. Storage — the category that quietly compounds

Storage starts cheap and grows in three directions you didn't budget for: database size, backup retention, and user-uploaded assets.

A 5GB Postgres database routinely doubles to 10GB in the first six months once you start logging events, retaining audit trails, and caching denormalized views. Managed Postgres on Neon, Supabase, or RDS prices on storage plus compute, and the storage line runs $0.10-0.35 per GB-month depending on tier. A 20GB working set plus three days of point-in-time recovery is a different bill from a 5GB working set, even if your queries haven't changed.

Backups are where retention policy bites. Daily snapshots kept for 30 days on a 20GB database is 600GB-months of storage, even at cold-tier pricing. AWS S3 Standard is $0.023/GB/month — small in isolation, real when you do the year-end math on a media-heavy product.

User-uploaded files (avatars, attachments, exports) is the surprise. Three thousand active users averaging 8MB each is 24GB of S3, served forever. Cloudflare R2 charges $0.015/GB/month and no egress fee — for any product that serves files back to users, that egress difference dwarfs the storage line.

3. Egress — the line item that surprises everyone

Egress (data transfer out of the cloud) is the single most mispredicted line on a year-one cloud bill. AWS charges $0.09/GB for the first 10TB/month of internet egress. Cloudflare R2, Backblaze B2, and Bunny.net charge $0.00.

Concrete: a SaaS app serving 50,000 unique users with 2MB of assets each is 100GB/month of egress. On AWS S3 that's $9/month in egress, which seems trivial until you multiply by 12 and remember it's per region if you've enabled cross-region replication. A media product serving 30s video clips to 5,000 users a day can hit $400/month in pure egress on AWS — for storage they're already paying for.

A Cloudflare CDN in front of S3 caches the request layer but doesn't make egress free; CloudFront has its own egress pricing ($0.085/GB at the low tier). If a substantial part of your product is serving user files, move them to R2 or B2 on day one. It's a fifteen-minute migration on a small dataset and a $0/month bill ever after.

4. Observability — the “I'll add it later” tax

Observability is a category that quietly determines whether your first paying customer's bug report becomes a one-hour fix or a one-week panic. Three sub-categories: error tracking, uptime monitoring, and metrics / logs / traces.

Error tracking is non-negotiable from day one. Sentry's developer plan covers a single hobby project for $0 and a real product for $26/month. The alternative — discovering a regression because a paying customer emailed you — costs more in lost trust than Sentry costs in dollars.

Uptime monitoring on Better Stack or UptimeRobot is $0-15/month for the side-project tier. Worth every penny the first time your Stripe webhook handler silently 500s at 3am.

The Datadog / New Relic / Honeycomb stack is what to skip in year one. You don't have the request volume to justify $100+ per host per month. Cloud-provider logs (CloudWatch, Vercel logs, Fly logs) plus Sentry plus uptime monitoring is enough for the first 5,000 users. Add the heavy stack when your eyes glaze over reading grep output, not before.

Honest year-one observability budget for a restrained founder: $30 – $80/month. Founders who buy the enterprise stack early spend $200+/month and rarely use the dashboards.

5. Ops — the category most founders forget exists

Ops is the bucket of small, recurring expenses that don't fit anywhere else and that nobody puts in the spreadsheet. Each line is small. Together they're $80-200/month.

The usual list: domain registration ($12-20/year), transactional email (Postmark or Resend, $10-30/month at low volume), email deliverability monitoring (free at first), a status page (free on Better Stack or $0-30/month on Statuspage), a secrets manager (Doppler or Infisical at $0 hobby tier, $20-40/month at team tier), CI minutes (GitHub Actions free tier is generous for one developer, paid above that), and a container registry if you're shipping containers (free on GHCR, paid on Docker Hub for private repos).

The reason ops bites is timing. You don't pay for any of it until you're about to launch — the week you actually need a status page, set up Postmark with a verified domain, and provision a secrets manager that isn't your shell history. So the $150/month bill arrives the same week you're shipping the thing, and it feels worse than it should.

Budget it on day one. Year-one ops total: $1,000 – $2,400 all-in.

Where these numbers get baked into the calculator

The year-one cost calculator rolls all five of these categories into a single "Hosting + SaaS tools" line that moves with the stack input. SaaS-US assumes a serverless / managed-Postgres / Stripe / Postmark stack and lands at $1,800-4,200/year. Mobile bumps it to $2,400-5,400 (Apple's $99, Google's $25, plus push and crash services). Marketplace lands at $3,000-7,800 because you're paying for search, payments processing, and image CDN at higher tiers.

Those ranges are deliberately wide. The low end is a restrained founder using Cloudflare R2, Workers, and free tiers wherever possible. The high end is the same product on AWS without egress-conscious storage. The difference is real — about 2x — and it's the single largest savings a careful founder can make without compromising user experience.