Istilah SWE

Balik ke index.

Arsitektur sistem

  • Monolith — satu aplikasi besar, semua fitur jadi satu codebase/deployment. Gampang dikembangkan di awal, tapi makin gede makin susah diubah tanpa mengganggu bagian lain.
  • Microservices — sistem dipecah jadi service-service kecil yang independen, komunikasi lewat API/message queue. Lebih fleksibel di-scale dan deploy per bagian, tapi nambah kompleksitas operasional (banyak service yang harus dimonitor, network jadi titik gagal baru).
  • Event-driven architecture — service saling komunikasi lewat event (misal “order_created”) yang dikirim ke message broker (Kafka, RabbitMQ), bukan panggil API langsung. Bikin service lebih longgar keterikatannya (loosely coupled).
  • API Gateway — satu pintu masuk di depan banyak microservices, ngatur routing, auth, rate limiting biar client nggak perlu tau detail tiap service.
  • Idempotency — kalau operasi yang sama dijalankan berkali-kali, hasilnya tetap sama (nggak dobel efek). Penting banget di sistem pembayaran/retry otomatis — sering jadi pertanyaan interview.
  • Statelessness — server nggak nyimpen state antar request (semua info yang dibutuhkan ada di request itu sendiri). Memudahkan horizontal scaling karena request bisa dilempar ke server manapun.

Skalabilitas & performa

  • Horizontal scaling — nambah lebih banyak mesin/instance. Vertical scaling — nambah kapasitas satu mesin (CPU/RAM lebih gede). Horizontal biasanya lebih disukai buat sistem modern karena nggak ada batas atas yang keras.
  • Load balancing — bagi traffic ke beberapa server biar nggak ada satu server yang kebebanan.
  • Caching — nyimpen hasil yang sering diakses di tempat cepat (Redis, in-memory) biar nggak perlu hitung/query ulang dari sumber yang lambat.
  • Sharding — database dipecah jadi beberapa bagian (shard) berdasarkan suatu key, tiap shard nyimpen sebagian data. Dipakai kalau satu database udah nggak muat/kelambatan diakses semua orang.
  • Latency vs throughput — latency itu seberapa cepat satu request selesai; throughput itu berapa banyak request yang bisa ditangani per satuan waktu. Keduanya sering trade-off satu sama lain.
  • Bottleneck — bagian sistem yang paling lambat/paling membatasi performa keseluruhan — biasanya ini yang dicari duluan pas optimasi.

Reliability & operasional

  • SLA / SLO / SLI — SLA (Service Level Agreement) itu janji ke customer (misal “uptime 99.9%”), SLO (Objective) itu target internal yang biasanya lebih ketat dari SLA, SLI (Indicator) itu metrik nyata yang diukur.
  • Fault tolerance — sistem tetap jalan (mungkin dengan kapasitas berkurang) walau sebagian komponennya gagal.
  • Graceful degradation — kalau ada fitur yang error/down, sistem tetap kasih pengalaman yang “cukup baik” (misal rekomendasi default) daripada crash total.
  • Circuit breaker — pola buat berhenti manggil service yang lagi bermasalah sementara waktu, biar nggak memperparah keadaan (mirip sekring listrik).
  • Observability — kemampuan buat “lihat ke dalam” sistem dari luar, lewat tiga pilar:
    • Logging — catatan kejadian detail (apa yang terjadi, kapan)
    • Metrics — angka teragregasi dari waktu ke waktu (CPU usage, request/s)
    • Tracing — jejak satu request lewat banyak service, buat tau di mana dia lambat/error
  • Postmortem — dokumen setelah insiden besar: apa yang terjadi, kenapa, dan apa yang diperbaiki biar nggak kejadian lagi. Biasanya “blameless” (fokus ke sistem, bukan nyalahin orang).

Praktik engineering

  • CI/CD — Continuous Integration (kode yang di-push otomatis di-test/build) dan Continuous Deployment/Delivery (otomatis dideploy ke production/staging).
  • Technical debt — konsekuensi dari keputusan cepat/pintas yang diambil demi kecepatan, yang nanti harus “dibayar” dalam bentuk kerja ekstra buat merapikan.
  • Trade-off — kata favorit senior. Hampir semua keputusan teknis itu tukar guling: lebih cepat vs lebih murah, lebih fleksibel vs lebih sederhana. Kalau ditanya “kenapa pilih X”, jawaban bagus selalu nyebut trade-off-nya.
  • Code review / PR (pull request) — proses ngajuin perubahan kode buat di-review orang lain sebelum digabung ke codebase utama.
  • Refactoring — ngubah struktur kode tanpa ngubah perilakunya, biar lebih gampang dibaca/di-maintain.
  • Design doc / RFC — dokumen yang njelasin rencana teknis sebelum mulai ngoding, biasanya buat perubahan besar yang butuh masukan tim.
  • Feature flag — cara nyalain/matiin fitur tanpa deploy ulang, sering dipakai buat rollout bertahap atau A/B testing.
  • Rollback — balikin sistem ke versi sebelumnya kalau deployment baru bermasalah.

Flashcards

Apa itu idempotency? Kenapa penting di sistem pembayaran/retry? :: Operasi yang dijalankan berkali-kali hasilnya tetap sama (nggak dobel efek); penting biar retry otomatis nggak nyebabin transaksi ganda Bedanya horizontal scaling dan vertical scaling? :: Horizontal = nambah jumlah mesin/instance; vertical = nambah kapasitas satu mesin (CPU/RAM) Tiga pilar observability itu apa aja? :: Logging (catatan kejadian), metrics (angka teragregasi), tracing (jejak satu request lintas service) Apa bedanya SLA, SLO, dan SLI? :: SLA = janji ke customer, SLO = target internal (lebih ketat), SLI = metrik nyata yang diukur Apa itu circuit breaker dalam konteks sistem terdistribusi? :: Pola berhenti manggil service yang lagi bermasalah sementara, biar nggak memperparah kegagalan