Should I use Vercel or AWS for hosting a Next.js SaaS app with 10K monthly users and a team of 2?

accepted_conditional · Pro · 499s · $0.55

This verdict assumes 33% of constraints

The following constraints were not provided and default values were used:

6 branches explored · 4 survived · 3 rounds · integrity 75%
Stay on Vercel Pro ($40/month for 2 seats). For 10K monthly users generating ~500K-1M page views/month
Confidence
88%
Risk unknown 499s
Decision timeline Verdict

Deploy on Vercel Pro ($40/month for 2 seats) with all data and background services on platform-independent...

Decision
88%
Execution
Uncertainty

Decision

  1. Stay on Vercel Pro ($40/month for 2 seats). For 10K monthly users generating ~500K-1M page views/month, Vercel Pro's included limits (1TB bandwidth, 1M serverless invocations) are sufficient. Total infrastructure cost: ~$90/month (Vercel Pro $40 + Neon Postgres $19 + Upstash Redis $10 + Cloudflare R2 ~$0 + misc ~$20). Critical architectural rule: DO NOT use Vercel KV, Vercel Postgres, Vercel Blob, or Vercel Cron. Use external providers (Neon, Upstash, Cloudflare R2, GitHub Actions). This preserves the 1-week reversibility constraint — your data layer stays platform-independent. Re-evaluate at 50K monthly users or $150/month Vercel spend. At that threshold, migrate to AWS via SST (~20 hours setup), where ~$60-80/month savings justify migration within 6 months. Key failure modes: (
  2. If you need WebSockets, add Railway/Fly.io ($0-5/month) from day one — Vercel doesn't support persistent WebSockets. (
  3. If cold starts exceed 3s on critical routes, use Vercel Edge Functions (<50ms cold start) instead of Node.js serverless functions (1-3s cold start).

Next actions

Create Vercel Pro project, connect GitHub repo, configure build settings for Next.js App Router or Pages Router as appropriate
backend · immediate
Provision Neon Postgres database, Upstash Redis instance, and Cloudflare R2 bucket; store all connection strings as Vercel environment variables
backend · immediate
Set up GitHub Actions for any cron/scheduled tasks instead of Vercel Cron to maintain platform independence
backend · immediate
Determine if the SaaS requires WebSocket connections; if yes, deploy a minimal WebSocket service on Railway or Fly.io ($0-5/month) immediately
backend · immediate
Set up a monthly cost tracking dashboard and Vercel usage alerts; flag when approaching $150/month Vercel spend or 50K monthly users to trigger AWS migration evaluation via SST
infra · before_launch
Measure cold start times on critical API routes; migrate latency-sensitive endpoints to Vercel Edge Functions if cold starts exceed 3 seconds
backend · before_launch
This verdict stops being true when
SaaS requires persistent WebSocket connections as a core feature (real-time collaboration, live dashboards), making Vercel's limitations a daily friction point rather than an edge case → Deploy on Railway or Fly.io as primary host from day one, with Dockerized Next.js and the same external data layer (Neon, Upstash, R2)
Vercel raises Pro pricing above $50/seat/month or reduces included limits below 500K serverless invocations, breaking the cost-benefit equation before reaching 50K users → Immediate migration to AWS via SST framework, targeting the same ~$90/month total spend
User growth exceeds 50K monthly users or Vercel spend exceeds $150/month within 6 months of launch → Migrate compute to AWS via SST (~20 hours setup), keeping external data layer unchanged
Full council reasoning, attack grid, and flip conditions included with Pro

Council notes

Socrates
Reframe the decision as choosing an architectural pattern rather than a hosting platform. The critical question is: '...
Vulcan
Recommendation A: Stick with Vercel's Hobby or Pro tier for simplicity and predictable costs. Vercel's Pro tier costs...
Daedalus
Stay on Vercel Pro ($40/month for 2 seats). For 10K monthly users generating ~500K-1M page views/month, Vercel Pro's ...

Assumptions

  • Next.js App Router or Pages Router architecture without heavy custom server requirements
  • 10K monthly users generating ~500K-1M page views/month (typical SaaS browsing pattern, not API-heavy)
  • No hard requirement for persistent WebSocket connections at launch
  • Team of 2 with limited DevOps experience — operational simplicity outweighs marginal cost savings
  • Vercel Pro pricing remains stable at $20/seat/month with current included limits (1TB bandwidth, 1M serverless invocations)

Operational signals to watch

reversal — SaaS requires persistent WebSocket connections as a core feature (real-time collaboration, live dashboards), making Vercel's limitations a daily friction point rather than an edge case
reversal — Vercel raises Pro pricing above $50/seat/month or reduces included limits below 500K serverless invocations, breaking the cost-benefit equation before reaching 50K users
reversal — User growth exceeds 50K monthly users or Vercel spend exceeds $150/month within 6 months of launch

Unresolved uncertainty

  • Vercel Pro pricing ($20/seat/month) may change — Vercel has adjusted pricing tiers historically, which could alter the cost-benefit threshold
  • The 50K user / $150 monthly spend migration threshold is a heuristic, not validated against specific SaaS traffic patterns — actual migration timing depends on API-heavy vs static-heavy workload mix
  • SST's '20 hours to migrate' estimate is community-sourced and varies significantly by app complexity, middleware usage, and ISR/SSR patterns
  • Cold start impact (1-3s) depends heavily on function bundle size and whether the team uses tree-shaking effectively — actual cold start times at 10K MAU are untested for this specific app

Branch battle map

R1R2R3Censor reopenb001b002b003b004b005b006
Battle timeline (3 rounds)
Round 1 — Initial positions · 3 branches
Branch b001 (Socrates) eliminated — The hybrid Vercel + AWS Lambda approach is architecturall...
Socrates proposed branch b004
Socrates Reframe the question: What is the minimum viable architecture that preserves 1-w…
Round 2 — Adversarial probes · 3 branches
Branch b004 (Socrates) eliminated — Branch b004 fails architecturally because it offers no co...
Socrates proposed branch b005
Socrates 重新定义问题:选择能最大化架构弹性和数据主权的托管方…
Round 3 — Final convergence · 4 branches
Socrates proposed branch b006
Socrates Reframe the decision as choosing an architectural pattern rather than a hosting …
Markdown JSON