Tidak ada arsitektur yang gratis: setiap keputusan adalah pengorbanan antara cost, reliability, performance, latency vs consistency, dan monolith vs microservices. Episode ini mengajarkan cara berpikir trade-off serta mendokumentasikan keputusan dengan Architecture Decision Record (ADR)

Di episode 2 kita belajar bahwa framework arsitektur memberi pillar untuk menilai desain. Tetapi ada satu kenyataan yang framework tidak pernah sebut eksplisit: pillar-pillar itu sering bertentangan. Keamanan yang ketat menambah latency. Reliability tinggi menambah biaya. Performance optimal menambah kompleksitas. Seorang arsitek tidak bisa memaksimalkan semuanya.
Inilah inti dari pekerjaan arsitek: membuat trade-offs secara sadar, lalu mendokumentasikannya. Episode ini membahas tiga trade-off paling umum dan alat bernama ADR (Architecture Decision Record) untuk merekam keputusan agar bisa dipertanggungjawabkan di kemudian hari.
Sering digambarkan sebagai "tidak bisa dapat ketiganya sekaligus". Concurrency di produksi memperjelas ini:
| Skema | Cost | Reliability | Performance |
|---|---|---|---|
| Single region, single AZ | Rendah | Rendah | Tinggi |
| Multi-AZ, RDS dengan standby | Sedang | Sedang | Tinggi |
| Multi-region active-active | Tinggi | Tinggi | Tinggi |
| Serverless on-demand | Rendah (0 saat idle) | Sedang | Sedang (cold start) |
Contoh kasus nyata: aplikasi batch analytics yang berjalan 1 jam tiap malam. Membeli VM reserved 24/7 untuk workload 1 jam adalah pemborosan besar — serverless atau instance spot jauh lebih masuk akal. Sebaliknya, core transaction system dengan SLA 99.99% tidak bisa diletakkan di satu AZ.
Sebelum memilih, tanyakan:
Arsitek menghitung ketiganya, bukan menerka. Data bisnis ini menentukan trade-off secara objektif.
Sistem terdistribusi menghadapi pilihan sulit antara kecepatan dan konsistensi data — dijelaskan secara klasik oleh CAP theorem: saat partisi jaringan terjadi, sistem harus memilih antara consistency (semua node melihat data sama) dan availability (semua node tetap melayani). Konsep yang lebih halus adalah trade-off antara latency dan consistency bahkan dalam kondisi normal.
Strong consistency (RDBMS, sync replication)
└─ latency tinggi, data selalu sama
Eventual consistency (CDN, cache, noSQL)
└─ latency rendah, data sama setelah beberapa saatTidak ada jawaban universal — jawabannya bergantung pada domain bisnis. Inilah alasan "memilih database" bukan soal favorit, melainkan soal membaca kebutuhan konsistensi (episode 5).
Kesalahan terbesar: menganggap microservices selalu lebih baik. Sebenarnya ada spektrum:
| Aspek | Monolith | Microservices |
|---|---|---|
| Deployment | Satu unit, sederhana | Banyak unit, kompleks |
| Scaling | Seluruh app | Per service |
| Kecepatan rilis tim besar | Lambat (bottleneck) | Cepat per tim |
| Operasional | Sederhana | Mahal (observability, jaringan) |
| Cocok untuk | Tim kecil, domain sederhana | Tim besar, domain kompleks |
Warning
Aturan praktis: mulai dari monolith, pisah menjadi microservices hanya ketika batas domain jelas dan tim sudah cukup besar. "Microservices-first" tanpa kebutuhan nyata adalah sumber biaya operasional dan kompleksitas yang tidak perlu — kebalikan dari trade-off reasoning.
Banyak arsitek memilih modular monolith: kode satu aplikasi, tapi dipisahkan ke modul dengan batas domain yang tegas. Deployment tetap sederhana seperti monolith, tetapi struktur memungkinkan dipisah nanti saat benar-benar butuh. Ini trade-off paling rasional untuk mayoritas organisasi.
Keputusan arsitektur adalah aset paling berharga sekaligus paling cepat hilang. Enam bulan kemudian, tim bertanya "kenapa kita pakai pattern ini?" — dan tidak ada yang ingat. ADR (Architecture Decision Record) menjawabnya: dokumen singkat yang merekam konteks, keputusan, dan konsekuensinya.
# ADR-001: Managed Database dibanding Self-Managed
## Status
Accepted
## Konteks
Aplikasi butuh PostgreSQL untuk data transaksional.
Tim kecil tanpa DBA penuh, target SLA 99.9%.
## Keputusan
Gunakan RDS (managed) daripada PostgreSQL self-hosted.
## Konsekuensi
Positif: backup otomatis, failover, patch terkelola.
Negatif: biaya lebih tinggi, kontrol tuning terbatas.
Alternatif yang dipertimbangkan: PostgreSQL di EC2, Aurora.Hanya 15-30 baris, cukup untuk menyimpan konteks dan alasan. Simpan ADR di repository yang sama dengan kode — versioning otomatis, review bisa dilakukan seperti pull request. Episode 23 akan membahas governance ADR di level organisasi.
Inti yang harus dibawa pulang:
Di episode 4 selanjutnya kita akan membahas compute & serverless architecture — memilih antara VM, container, dan serverless, pola arsitektur masing-masing, serta cara mendesain pilihan compute yang optimal. Sampai jumpa di episode 4!