You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

209 lines
8.0 KiB

[
{
"id": "url-shortener-easy",
"name": "URL Shortener",
"description": "Build a basic service to shorten URLs with a single backend.",
"difficulty": "easy",
"targetRps": 100,
"durationSec": 60,
"maxMonthlyUsd": 100,
"maxP95LatencyMs": 200,
"requiredAvailabilityPct": 99.0,
"mustInclude": ["database"],
"hints": ["Start with a basic backend and persistent storage."]
},
{
"id": "url-shortener-medium",
"name": "URL Shortener",
"description": "Scale your URL shortener to handle traffic spikes and ensure high availability.",
"difficulty": "medium",
"targetRps": 1000,
"durationSec": 180,
"maxMonthlyUsd": 300,
"maxP95LatencyMs": 150,
"requiredAvailabilityPct": 99.9,
"mustInclude": ["database", "loadBalancer"],
"encouragedComponents": ["cache"],
"hints": ["Consider caching and horizontal scaling."]
},
{
"id": "url-shortener-hard",
"name": "URL Shortener",
"description": "Design a globally distributed URL shortening service with low latency and high availability.",
"difficulty": "hard",
"targetRps": 10000,
"durationSec": 300,
"maxMonthlyUsd": 1000,
"maxP95LatencyMs": 100,
"requiredAvailabilityPct": 99.99,
"mustInclude": ["cdn", "database"],
"encouragedComponents": ["cache", "messageQueue"],
"hints": ["Think about write-path consistency and global replication."]
},
{
"id": "chat-app-easy",
"name": "Chat App",
"description": "Implement a simple chat app for small group communication.",
"difficulty": "easy",
"targetRps": 50,
"durationSec": 120,
"maxMonthlyUsd": 150,
"maxP95LatencyMs": 300,
"requiredAvailabilityPct": 99.0,
"mustInclude": ["webserver", "database"],
"hints": ["You don’t need to persist every message yet."]
},
{
"id": "chat-app-medium",
"name": "Chat App",
"description": "Support real-time chat across mobile and web, with message persistence.",
"difficulty": "medium",
"targetRps": 500,
"durationSec": 300,
"maxMonthlyUsd": 500,
"maxP95LatencyMs": 200,
"requiredAvailabilityPct": 99.9,
"mustInclude": ["webserver", "database", "messageQueue"],
"encouragedComponents": ["cache"],
"hints": ["Ensure you decouple frontend from persistence."]
},
{
"id": "chat-app-hard",
"name": "Chat App",
"description": "Design a Slack-scale chat platform supporting typing indicators, read receipts, and delivery guarantees.",
"difficulty": "hard",
"targetRps": 5000,
"durationSec": 600,
"maxMonthlyUsd": 1500,
"maxP95LatencyMs": 100,
"requiredAvailabilityPct": 99.99,
"mustInclude": ["messageQueue", "database"],
"discouragedComponents": ["single-instance webserver"],
"hints": ["Think about pub/sub, retries, and ordering guarantees."]
},
{
"id": "netflix-easy",
"name": "Netflix Clone",
"description": "Build a basic video streaming service with direct file access.",
"difficulty": "easy",
"targetRps": 200,
"durationSec": 300,
"maxMonthlyUsd": 500,
"maxP95LatencyMs": 500,
"requiredAvailabilityPct": 99.0,
"mustInclude": ["cdn"],
"hints": ["You don’t need full-blown adaptive streaming yet."]
},
{
"id": "netflix-medium",
"name": "Netflix Clone",
"description": "Add video transcoding, caching, and recommendations.",
"difficulty": "medium",
"targetRps": 1000,
"durationSec": 600,
"maxMonthlyUsd": 2000,
"maxP95LatencyMs": 300,
"requiredAvailabilityPct": 99.9,
"mustInclude": ["cdn", "data pipeline", "cache"],
"encouragedComponents": ["monitoring/alerting"],
"hints": ["Think about asynchronous jobs and caching strategy."]
},
{
"id": "netflix-hard",
"name": "Netflix Clone",
"description": "Design a globally resilient, multi-region Netflix-scale system with intelligent failover and real-time telemetry.",
"difficulty": "hard",
"targetRps": 10000,
"durationSec": 900,
"maxMonthlyUsd": 10000,
"maxP95LatencyMs": 200,
"requiredAvailabilityPct": 99.999,
"mustInclude": ["cdn", "data pipeline", "monitoring/alerting"],
"encouragedComponents": ["messageQueue", "cache", "third party service"],
"hints": ["You’ll need intelligent routing and fallback mechanisms."]
},
{
"id": "rate-limiter-easy",
"name": "Rate Limiter",
"description": "Build a basic in-memory rate limiter for a single instance service.",
"difficulty": "easy",
"targetRps": 200,
"durationSec": 60,
"maxMonthlyUsd": 50,
"maxP95LatencyMs": 100,
"requiredAvailabilityPct": 99.0,
"mustInclude": ["webserver"],
"hints": ["Use an in-memory store and sliding window or token bucket."]
},
{
"id": "rate-limiter-medium",
"name": "Rate Limiter",
"description": "Design a rate limiter that works across multiple instances and enforces global quotas.",
"difficulty": "medium",
"targetRps": 1000,
"durationSec": 180,
"maxMonthlyUsd": 300,
"maxP95LatencyMs": 50,
"requiredAvailabilityPct": 99.9,
"mustInclude": ["webserver", "cache"],
"encouragedComponents": ["messageQueue"],
"hints": ["Consider Redis or distributed token buckets. Account for clock drift."]
},
{
"id": "rate-limiter-hard",
"name": "Rate Limiter",
"description": "Build a globally distributed rate limiter with per-user and per-region policies.",
"difficulty": "hard",
"targetRps": 5000,
"durationSec": 300,
"maxMonthlyUsd": 1000,
"maxP95LatencyMs": 30,
"requiredAvailabilityPct": 99.99,
"mustInclude": ["cache"],
"encouragedComponents": ["cdn", "data pipeline", "monitoring/alerting"],
"hints": ["Ensure low latency despite distributed state. Avoid single points of failure."]
},
{
"id": "metrics-system-easy",
"name": "Metrics System",
"description": "Create a basic system that collects and stores custom app metrics locally.",
"difficulty": "easy",
"targetRps": 100,
"durationSec": 120,
"maxMonthlyUsd": 100,
"maxP95LatencyMs": 200,
"requiredAvailabilityPct": 99.0,
"mustInclude": ["webserver", "database"],
"hints": ["Start by storing metrics as timestamped values in a simple DB."]
},
{
"id": "metrics-system-medium",
"name": "Metrics System",
"description": "Design a pull-based metrics system like Prometheus that scrapes multiple services.",
"difficulty": "medium",
"targetRps": 1000,
"durationSec": 300,
"maxMonthlyUsd": 500,
"maxP95LatencyMs": 100,
"requiredAvailabilityPct": 99.9,
"mustInclude": ["data pipeline", "monitoring/alerting"],
"encouragedComponents": ["cache"],
"hints": ["Consider time-series indexing and label-based queries."]
},
{
"id": "metrics-system-hard",
"name": "Metrics System",
"description": "Build a scalable, multi-tenant metrics platform with real-time alerts and dashboard support.",
"difficulty": "hard",
"targetRps": 5000,
"durationSec": 600,
"maxMonthlyUsd": 1500,
"maxP95LatencyMs": 50,
"requiredAvailabilityPct": 99.99,
"mustInclude": ["monitoring/alerting", "data pipeline"],
"encouragedComponents": ["messageQueue", "cache", "third party service"],
"hints": ["Think about downsampling, alert thresholds, and dashboard queries."]
}
]