Design Dropbox from an empty canvas: chunked uploads to object storage, file metadata in a database, change notifications to the user’s other devices, and downloads, at 2,000 requests a second.
Unlock it once for 25 credits; everything inside it is free (runs, changes, Submit, results, hints). Sign in with Google to start; new accounts get free credits.
What it must do
Upload a file in 4 MB chunks, so a failed upload resumes where it stopped.
Keep each file’s metadata (path, version, chunk list) and list what changed since a device last synced.
Tell the user’s other devices about a change within seconds.
Download any version of a file, chunk by chunk.
Scale
2,000 requests a second: 1,000 sync checks, 400 chunk uploads and 600 chunk downloads.
400 chunks of 4 MB a second is 1.6 GB a second of uploads, about 4.2 PB a month before dedup.
About half of all chunks are already stored (same hash), so they are never stored twice.
Each change is pushed to 2 other devices on average.
Request types to route: sync (50%, read), upload (20%, write), download (30%, read). Budget: $6,000 a month.
Estimate first
Upload bandwidth (GB/s)
New chunk storage a month after dedup (PB)
Device notifications a second (per second)
Monthly cloud cost of your design (USD)
The test cases
You start from an empty canvas. When you run the tests, each one simulates your design with its own traffic and failures:
Test
What it does
Passes when
Normal day
The normal day: the traffic in the brief, nothing broken.
Success ≥ 99.9%; p99 latency ≤ 50 ms (sync); p99 latency ≤ 400 ms (upload); p99 latency ≤ 300 ms (download)
Monday morning
At 5 s everyone opens their laptop: traffic doubles for 8 s.
Success ≥ 99%; p99 latency ≤ 100 ms (sync)
Database 5× slower
At 5 s the main database on the request path answers 5× slower for 8 s.
Success ≥ 99%; p99 latency ≤ 65 ms (sync)
A server dies
At 4 s one server of the first app service on the request path dies for 10 s.
Success ≥ 99%
Budget: $6,000/month
The normal day's design must cost at most $6,000 a month.
Cost ≤ $6,000/month
Must include
Object storage for chunks. File contents are stored as content-addressed chunks in object storage, never in the database.
A metadata database. Paths, versions and chunk lists are small, structured and must be consistent: they live in a database.
Change notifications to devices. Other devices must hear about a change within seconds, without polling the database.