1.Designing a System on AWS, Worked Through
A senior design answer is not a diagram produced from memory. It is a short sequence: establish the requirements and the scale, derive the read and write shape from them, choose the data model, and only then pick services. Doing it in that order means every box on the final diagram has a reason, and the reasons are what is actually being assessed.
Key features
- Start by separating functional requirements from non-functional ones — latency, availability, consistency and durability targets shape more of the design than the feature list does
- Derive traffic numbers explicitly, including the read-to-write ratio, because a read-heavy system and a write-heavy one diverge at the first decision
- Choose the data model before the database: the access patterns decide whether a key-value store or a relational one fits
- Name what may be eventually consistent and what may not, because that single line determines caching, replication and queue placement
- State the failure behaviour for each dependency — timeout, retry bound, and what a user sees when it is unavailable
- Finish with the trade-off you made and what would change your mind, which is what distinguishes a design from a preference
The six steps, and the question that unlocks each one
- Six numbered steps arranged as a descending staircase.
- Step 1: requirements — what must be true, and the latency, availability and consistency targets.
- Step 2: scale — requests per second, object sizes, growth, and the read-to-write ratio.
- Step 3: API — the operations, and which of them are on the critical path.
- Step 4: data model — access patterns first, then the store that serves them.
- Step 5: services — compute, cache, queue and network, chosen to fit steps 1 to 4.
- Step 6: failure and operations — what breaks, what the user sees, what is observable, and what it costs.
- A note reads: the arrow only runs downward, and a change at any step invalidates everything below it.
Signature
requirements → scale → API → data model → services → failure and operations
Requirements, scale, API, data model, services, failure and operations — in that order, downward only. Do the arithmetic before naming a service, separate what blocks a user from what does not, state what may be eventually consistent, and finish with the trade-off you made and what would change it.