System Design Interview
Cara mempersiapkan dan menjawab pertanyaan system design interview secara efektif
Apa itu System Design Interview
- Sesi interview di mana kandidat diminta merancang arsitektur sistem berskala besar
- Biasanya berlangsung 45-60 menit
- Tidak ada jawaban tunggal yang benar — yang dinilai adalah proses berpikir dan kemampuan trade-off
- Umum untuk posisi senior engineer, staff engineer, dan engineering manager
Yang Dinilai dalam System Design Interview
- Kemampuan mengklarifikasi kebutuhan sebelum mulai merancang
- Pemahaman tentang komponen sistem dan cara kerjanya
- Kemampuan mengidentifikasi dan mendiskusikan trade-off
- Estimasi kapasitas yang masuk akal
- Komunikasi yang jelas selama proses
Framework Menjawab System Design
1. Klarifikasi Kebutuhan (5 menit)
Jangan langsung merancang — tanyakan dulu:
- Functional requirements: fitur apa saja yang harus ada?
- Non-functional requirements: berapa pengguna? Latency target? Availability requirement?
- Scale: read-heavy atau write-heavy? Data retention berapa lama?
- Constraints: ada batasan teknologi atau team?
Contoh pertanyaan untuk "Rancang Twitter":
- Berapa Daily Active Users?
- Apakah perlu support media (foto, video)?
- Berapa lama tweet disimpan?
- Apakah timeline harus real-time?
2. Estimasi Kapasitas (3-5 menit)
- Hitung order of magnitude, bukan angka presisi
- DAU × rata-rata request per user = QPS (queries per second)
- Estimasi storage: ukuran data × jumlah data × retention period
- Bandwidth: QPS × rata-rata ukuran response
Contoh:
DAU: 100 juta pengguna
Rata-rata tweet per user per hari: 2
Write QPS: 100M × 2 / 86400 ≈ 2300 writes/detik
Read/Write ratio: 100:1 → Read QPS ≈ 230,000 reads/detik3. High-level Design (10-15 menit)
- Gambar komponen utama: client, load balancer, application server, database, cache
- Jelaskan flow request dari awal sampai akhir
- Identifikasi komponen yang perlu perhatian khusus
4. Deep Dive (15-20 menit)
- Fokus pada komponen yang paling kritis atau menarik
- Diskusikan trade-off dari setiap keputusan
- Interviewer biasanya akan mengarahkan ke area yang ingin di-explore lebih dalam
5. Identifikasi Bottleneck dan Solusi
- Di mana bottleneck pada design saat ini?
- Bagaimana handle 10x traffic dari estimasi awal?
- Single point of failure di mana?
Contoh Topik yang Sering Muncul
- Rancang URL Shortener (bit.ly)
- Rancang sistem chat (WhatsApp)
- Rancang news feed (Facebook/Twitter)
- Rancang sistem notifikasi
- Rancang ride-sharing service (Uber/Gojek)
- Rancang sistem storage (Google Drive/Dropbox)
- Rancang rate limiter
- Rancang web crawler
Tips untuk Setiap Topik
URL Shortener
Komponen kunci: hash function, database untuk mapping, caching untuk popular URL
Chat System
Komponen kunci: WebSocket untuk real-time, message storage, online presence
News Feed
Komponen kunci: fanout (push vs pull), ranking algorithm, caching
Kesalahan Umum
- Langsung coding tanpa klarifikasi kebutuhan
- Over-engineer — menambahkan komponen kompleks yang tidak diperlukan
- Diam terlalu lama tanpa komunikasi — selalu berpikir keras (think out loud)
- Tidak mendiskusikan trade-off — hanya menyebutkan solusi tanpa kelebihan/kekurangan
- Defensive saat dikritik — interviewer menantang untuk melihat bagaimana kamu merespons
Cara Mempersiapkan
- Pelajari komponen sistem: load balancer, cache, message queue, database
- Latihan dengan soal-soal populer (Grokking System Design, System Design Primer)
- Latihan menggambar dan menjelaskan arsitektur dengan lantang
- Baca engineering blog perusahaan besar: Uber, Netflix, Airbnb, Meta
- Mock interview dengan teman atau mentor
Praktik Terbaik
- Mulai dari simple, tambahkan kompleksitas hanya jika dibutuhkan
- Selalu tanyakan apakah mau explore lebih dalam suatu area sebelum lanjut
- Akui ketika tidak tahu sesuatu — lebih baik jujur dan diskusikan cara mencarinya
- Gunakan angka yang masuk akal dari industri (2 KB per tweet, 100ms acceptable latency, dll)