Skip to content
playdsa
Preferences

Make yourself comfortable.

Saved on this browser. Your device’s reduced-motion preference is always respected.

Theme
Advanced settings

Contract Harbor

Learn
Play
Prove
Problem context and objectives
Mission briefing

Lead systems engineer · Contract Harbor

Design the public API for a large-file upload service. Clients may lose connectivity, retry requests, and resume later without duplicating files.

The design must survive file size up to 20 GB and uploads 5K/s. Every box must earn its place by satisfying a requirement or containing a failure.

How you win

  1. 1Trace one user action from request to durable outcome
  2. 2Connect every component to a stated requirement
  3. 3Explain the losing tradeoff, not only the chosen technology

Rules and pressure

  • file size: up to 20 GB
  • uploads: 5K/s
  • Resumable chunks
  • Idempotent completion

New words in this mission

Open a term for a plain-language explanation.
idempotent operation+

Repeating the same request has the same final effect as doing it once. This makes automatic retries safe.

Lesson 1 of 3

Live architecture trace

Contract Harbor: request to outcome

1/5
◉Uploaderclient⬡Upload APIserviceDBSession storedataDBObject storagedataWKVerifierworker
LIVE EVENTinitiate

Uploader sends “initiate” to Upload API. The control plane creates a scoped upload session, while clients send resumable chunks directly to object storage.

file size = up to 20 GB

Design the public API for a large-file upload service. Clients may lose connectivity, retry requests, and resume later without duplicating files. Follow one real user action through the complete architecture; a component is useful only when you can explain the request, state, or failure it handles.

Help shape PlayDSA

Something confusing, broken, or missing? Leave a quick note without leaving your lesson.

Please leave out passwords, payment details and other private information.

Page included: /

Sign in to save feedback here, or send it with your email app. Your draft stays here while you sign in.

Open email instead