System Design Beginner
00 Requirements & Estimation
A design is won or lost before the first box is drawn: pin down what you are building, say out loud what you are not building, and put numbers on the load. Vague requirements produce unfalsifiable architectures.
You are asked to design a photo-sharing app in the spirit of Instagram. Before any architecture: write the requirements. Give 4-6 functional requirements you will support, 3-4 non-functional requirements each with a target number, and 2-3 explicit scope cuts (features you will NOT build) with a one-line reason for each cut.
Hints
- Functional = what the system does (upload a photo, follow a user, view a feed). Non-functional = qualities of how it does it (latency, availability, durability).
- A non-functional requirement without a number cannot be checked. Aim for targets like p99 feed load under 200 ms, 99.9% availability, or never lose an uploaded photo.
- Cutting scope is part of the answer: excluding DMs, stories, or video keeps a 40-minute design honest. Say why you cut each one.