System Design AI
Design brief
Product & backendIntermediate45 min suggested

Design a File Storage Service

Upload and share large files with resumable transfer, versions and safe metadata changes.

Backend and product engineers designing software behavior.

Your approach: Use diagrams, tables or prose for customer contracts, state transitions and data ownership; include APIs only to the depth the question requests.

The problem

Design a file storage and sharing service for web and desktop clients. Separate file bytes from metadata and permissions, and explain resumable uploads, downloads and version creation. Define what a user sees after an interrupted upload or conflicting edits from two devices.

  • Support 1 million users uploading 100 TB/day in total; files range from 1 KB to 10 GB.
  • Networks can disconnect mid-upload and desktop devices may edit offline.
  • Users can share a folder with named collaborators and revoke access later.

Work within these constraints

Supported file size

Declare the maximum supported single-file size.

Required target: ≥ 10 GB

Atomic file visibility

Do not publish metadata pointing to an incomplete or missing file version.

Revocation contract

Define authorization for bytes and metadata, including the lifetime of already-issued download links.

What to deliver

1

Metadata and versions

Define ownership, folders, permissions, version identity and conflict behavior.

2

Transfer protocol

Describe multipart upload, retry verification, completion and download access.

3

Storage and cleanup

Estimate daily and retained byte volume; handle unreferenced chunks and deleted versions.

4

Failure walkthrough

Trace a dropped upload, simultaneous edits and access revocation; compare two conflict policies.