a notification system
The brief
Design a notification system. This walkthrough is a placeholder: replace it with your own design notes and the page will render them with the course styling.
A design walkthrough in this course has four parts: the requirements you are committing to, the numbers those requirements imply, the drawing, and the build notes for the version you would actually run first.
Requirements
Functional
- What a caller can do, stated as verbs on nouns.
- What the system promises back, including what it refuses.
Non-functional
- Latency target at a percentile, not an average.
- Durability and consistency promises, and which ones are negotiable.
Capacity
| Input | Assumption | Derived |
|---|---|---|
| Requests per day | 10 million | ~116 per second average, plan for 5x peak |
| Stored objects | 1 million per day for 5 years | ~1.8 billion rows |
| Row size | 200 bytes | ~360 GB before indexes |
The drawing
Describe the components and the arrows between them. One machine first; add a component only when a number above forces it.
client -> API -> database
-> event log (async) -> report
Engineering note. Every arrow costs a failure mode. Name the failure before you draw the arrow.
Build notes
List what you would build first, what you would measure, and what you would leave out of the first version.
Continue with the complete track
Keep your progress and unlock the surrounding lessons, exercises, and complete learning path.
Unlock the complete track