Recraftory

Pengenalan System Design

Memahami apa itu system design dan mengapa penting bagi engineer dan Engineering Manager

Apa itu System Design

  • Proses mendefinisikan arsitektur, komponen, modul, dan data untuk memenuhi kebutuhan sistem
  • Menjawab pertanyaan: "Bagaimana kita membangun sistem yang bisa handle X pengguna dengan kebutuhan Y?"
  • Mencakup keputusan tentang database, caching, messaging, skalabilitas, dan availability
  • Bukan tentang memilih bahasa pemrograman atau framework — melainkan bagaimana komponen bekerja bersama

Mengapa System Design Penting

  • Keputusan arsitektur sulit untuk diubah setelah diimplementasi
  • Sistem yang dirancang buruk sulit di-scale dan mahal di-maintain
  • Engineering Manager perlu memahami system design untuk me-review proposal teknis tim
  • Menjadi dasar komunikasi antara engineer senior tentang arah teknis

Elemen Dasar System Design

Client dan Server

  • Client: yang mengajukan request (browser, mobile app, service lain)
  • Server: yang memproses request dan mengembalikan response
  • Protokol: cara client dan server berkomunikasi (HTTP, WebSocket, gRPC)

Database

  • Penyimpanan data yang persisten
  • Pilihan utama: relational (PostgreSQL, MySQL) vs non-relational (MongoDB, DynamoDB)
  • Keputusan database adalah salah satu yang paling berdampak dalam system design

Caching

  • Menyimpan hasil komputasi atau query untuk digunakan kembali
  • Mengurangi beban database dan mempercepat response
  • Contoh: Redis, Memcached, CDN untuk static assets

Load Balancer

  • Mendistribusikan traffic ke beberapa server
  • Memungkinkan horizontal scaling
  • Menghilangkan single point of failure

Message Queue

  • Komunikasi asynchronous antar service
  • Decoupling: producer tidak perlu tahu tentang consumer
  • Contoh: Kafka, RabbitMQ, SQS

Trade-off dalam System Design

System design selalu melibatkan trade-off. Tidak ada solusi yang sempurna:

Trade-offPilihan APilihan B
Consistency vs AvailabilityData selalu akuratSistem selalu tersedia
Latency vs ThroughputRespon cepat per requestBanyak request per detik
Read vs WriteOptimasi readOptimasi write
SQL vs NoSQLStruktur teratur, relasi kuatFleksibel, mudah di-scale

Pendekatan System Design

Top-down

  1. Mulai dari kebutuhan high-level (functional dan non-functional requirements)
  2. Rancang arsitektur besar sebelum detail
  3. Identifikasi bottleneck dan risiko
  4. Drill down ke komponen yang kritis

Capacity Estimation

  • Berapa pengguna yang diharapkan? (Daily Active Users, Monthly Active Users)
  • Berapa request per detik pada peak?
  • Berapa storage yang dibutuhkan dalam 1-5 tahun?
  • Dari angka ini, bisa ditentukan kebutuhan infrastruktur

Perbedaan System Design untuk Engineer vs EM

  • Engineer: fokus pada implementasi detail, teknologi spesifik, dan trade-off teknis
  • Engineering Manager: fokus pada memvalidasi proposal, mengidentifikasi risiko, dan memastikan tim membuat keputusan yang tepat untuk konteks bisnis

EM tidak perlu menjadi ahli system design, tapi perlu cukup paham untuk terlibat dalam diskusi dan review.

Praktik Terbaik

  • Mulai dengan kebutuhan (requirements), bukan solusi
  • Tanyakan dan dokumentasikan asumsi secara eksplisit
  • Diskusikan trade-off secara terbuka dengan tim
  • Gunakan ADR untuk mendokumentasikan keputusan arsitektur penting
  • Iterasikan desain — tidak perlu sempurna dari awal