beprodready

evolution · senior

Evolution: Survive Your Own Success

Your photo-feed startup just raised a seed round. Design the system that serves today's 2,000 rps — and survives next year's 10x, and the day a celebrity joins and traffic hits 20x. The catch: the budget is a seed budget. Building for the 20x day on day one will bankrupt you on the cost axis.

Steady traffic

2,000 rps

Spike

Budget

$3,000/mo

Functional requirements

  • Serve a personalized photo feed with < 250ms p99 latency at every stage
  • Store posts durably in a relational store
  • Feed reads are 90% of traffic and highly cacheable

Non-functional requirements

  • Stage 1 (today): 2,000 rps with 0% errors
  • Stage 2 (next year): 10,000 rps with 0% errors
  • Stage 3 (celebrity day): 40,000 rps with < 10% errors — graceful degradation beats collapse
  • Survive a region-A database outage at stage-2 traffic with < 1% errors
  • Total infrastructure cost under $3,000/month

Failure scenarios the sim will run

  • Stage 1: launch (2k rps)
  • Stage 2: a year later (10k rps)
  • Stage 3: celebrity joins (40k rps)
  • Region-A database outage at stage-2 traffic

How you'll be graded

  • Every growth stage is survived25% · scalability

    Stages 1 and 2 must run clean; stage 3 may degrade but not collapse.

  • The read path leans on caching17% · scalability

    A 90%-read feed must be served from cache layers; the hit-ratio claim must be defended for a feed workload (fan-out, personalization).

  • Survives the database outage at scale25% · availability

    All region-A databases die for 60s at 10k rps; the feed must keep serving.

  • Spend matches the current stage17% · cost-efficiency

    Under $3,000/month. The PRR penalizes capacity bought for stage 3 that stage 2 cannot justify — name what you would scale later instead.

  • The growth narrative holds up17% · justification-quality

    Capacity math per stage, what breaks first at each stage, and what you would change between stages.

Start designing →

Best on desktop — the canvas needs room to breathe. Drafts autosave locally.