Tiếp cận một bài toán system design (trong phỏng vấn hoặc công việc thực) sẽ hiệu quả hơn với một phương pháp có cấu trúc — làm rõ yêu cầu, ước lượng quy mô, thiết kế tổng thể rồi chi tiết, và thảo luận các trade-off. Một cách tiếp cận có phương pháp dẫn đến thiết kế tốt hơn.
Một cách tiếp cận có cấu trúc
1. LÀM RÕ YÊU CẦU → functional (làm gì) + non-functional (scale, latency,
availability, consistency); xác định phạm vi (đừng giả định — đặt câu hỏi, thu hẹp bài toán)
2. ƯỚC LƯỢNG QUY MÔ → user, request/giây, lượng dữ liệu, tỷ lệ đọc/ghi → định hướng thiết kế
3. THIẾT KẾ TỔNG THỂ → các thành phần chính và luồng dữ liệu (client, service, database, cache,
load balancer, queue); vẽ kiến trúc
4. THIẾT KẾ CHI TIẾT → mô hình/schema dữ liệu; các thành phần then chốt chuyên sâu; API; thách thức cụ thể
5. SCALE & TỐI ƯU → xác định bottleneck; áp dụng kỹ thuật (caching, load balancing,
sharding, replication, async); thảo luận TRADE-OFFS
6. XỬ LÝ các mối quan tâm → reliability, consistency, edge case, lỗi
