Should I use Vercel or AWS for hosting a Next.js SaaS app with 10K monthly users and a team of 2?
This verdict assumes 33% of constraints
The following constraints were not provided and default values were used:
- current_scale: moderate scale assumed (not_addressed)
- existing_stack: greenfield assumed (not_addressed)
WeakStrong
Candidate estimate (inferred)
Risk
unknown
499s
Deploy on Vercel Pro ($40/month for 2 seats) with all data and background services on platform-independent...
Decision
- 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: (
- If you need WebSockets, add Railway/Fly.io ($0-5/month) from day one — Vercel doesn't support persistent WebSockets. (
- 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
Candidate estimate (inferred, not source-confirmed): Provision Neon Postgres database, Upstash Redis instance, and Cloudflare R2 bucket; store all connection strings as Vercel environment variables
Set up GitHub Actions for any cron/scheduled tasks instead of Vercel Cron to maintain platform independence
Determine if the SaaS requires WebSocket connections; if yes, deploy a minimal WebSocket service on Railway or Fly.io ($0-5/month) immediately
Candidate estimate (inferred, not source-confirmed): 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
Measure cold start times on critical API routes; migrate latency-sensitive endpoints to Vercel Edge Functions if cold starts exceed 3 seconds
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 → Candidate estimate (inferred, not source-confirmed): 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)
Candidate estimate (inferred, not source-confirmed): 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 → Candidate estimate (inferred, not source-confirmed): Immediate migration to AWS via SST framework, targeting the same ~$90/month total spend
Candidate estimate (inferred, not source-confirmed): User growth exceeds 50K monthly users or Vercel spend exceeds $150/month within 6 months of launch → Candidate estimate (inferred, not source-confirmed): 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
Vulcan
Daedalus
Evidence boundary
Observed from your filing
- Should I use Vercel or AWS for hosting a Next.js SaaS app with 10K monthly users and a team of 2?
Assumptions used for analysis
- 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)
- current scale defaulted: moderate scale assumed (not_addressed)
- existing stack defaulted: greenfield assumed (not_addressed)
Inferred candidate specifics
- 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: (1) If you need WebSockets, add Railway/Fly.io ($0-5/month) from day one — Vercel doesn't support persistent WebSockets. (2) 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).
- Set up Vercel Pro with 2 seats, provision Neon Postgres (free tier → $19/month plan), Upstash Redis ($10/month), and Cloudflare R2 (free tier), then configure environment variables in Vercel to point all data services to these external providers instead of any Vercel-native data products.
- Branch b006 had the highest raw confidence (0.95) but is a [reframe] branch — it describes a principle ('platform-independent core pattern') without naming specific providers, costs, or migration thresholds. It is structurally disqualified as the winner because it produces no actionable deployment plan. Branch b003 (0.92 confidence) operationalizes the exact same principle with specific dollar amounts ($90/month total), named providers (Neon, Upstash, R2), concrete migration thresholds (50K users or $150/month), and two specific failure modes with mitigations. b003 survived 3 rounds of adversarial debate — strengthened by both gpt and opus in rounds 2 and 3, and split-examined by glm. It is the clear implementation winner.
- Hybrid Vercel + AWS Lambda from day one
- Killed in round 1. Two deployment pipelines, two logging systems, two billing dashboards create cognitive overhead that dominates costs for a 2-person team. Realistic hybrid cost is $120-240/month vs $90/month all-in on Vercel + external services. Adds 20-80ms latency per cross-provider hop for zero benefit at 10K MAU. The branch's own failure modes (needing DevOps specialist, debugging complexity) contradict its thesis.
- AWS Elastic Beanstalk or AWS Amplify for cost control and flexibility
- Branch b002 offered two recommendations without committing to either. Vercel Pro at this scale is cheaper ($40/month vs $50-150/month for AWS) and requires near-zero DevOps. The 'longer-term flexibility' benefit is already captured by b003's migration plan at 50K users via SST, making early AWS adoption premature optimization.
- Railway, Fly.io, or unspecified hybrid approach
Inferred specifics table
| Value | Kind | Basis | Where introduced |
|---|---|---|---|
| $40/month for 2 seats | estimate | synthetic | chosen_path |
| For 10K monthly users generating ~500K-1M page views/month | estimate | synthetic | chosen_path |
| Total infrastructure cost: ~$90/month | estimate | synthetic | chosen_path |
| Neon Postgres $19 + Upstash Redis $10 | technology | synthetic | chosen_path |
| + misc ~$20 | estimate | synthetic | chosen_path |
| Re-evaluate at 50K monthly users or $150/month | estimate | synthetic | chosen_path |
| users or $150/month Vercel spend | estimate | synthetic | chosen_path |
| ~20 hours setup | estimate | synthetic | chosen_path |
| where ~$60-80/month savings justify migration within 6 months | estimate | synthetic | chosen_path |
| If cold starts exceed 3s on critical routes | estimate | synthetic | chosen_path |
| <50ms cold start | threshold | synthetic | chosen_path |
| free tier → $19/month plan | estimate | synthetic | next_action |
| $10/month | estimate | synthetic | next_action |
| 0.95 | estimate | synthetic | selection_rationale |
| 0.92 confidence | estimate | synthetic | selection_rationale |
| $90/month total | estimate | synthetic | selection_rationale |
| 50K users or $150/month | estimate | synthetic | selection_rationale |
| Branch b003 | estimate | synthetic | selection_rationale |
| Killed in round 1 | estimate | synthetic | rejected_alternatives.rationale |
| cost is $120-240/month vs $90/month all-in on | estimate | synthetic | rejected_alternatives.rationale |
Unknowns blocking a firmer verdict
- 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
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 — Candidate estimate (inferred, not source-confirmed): 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 — Candidate estimate (inferred, not source-confirmed): User growth exceeds 50K monthly users or Vercel spend exceeds $150/month within 6 months of launch
Branch battle map
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 …