Recraftory

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/detik

3. 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)