Menilai arsitektur secara sistematis sebelum kode mahal ditulis: langkah ATAM dan utility tree scenario, versi review ringan untuk tim kecil, fitness functions sebagai gate otomatis di CI, serta ritme architecture review yang menjaga desain tetap sesuai kenyataan

Setelah di episode 21 kalian merancang sistem AI production-grade — RAG, vector store, agent dengan guardrails — muncul pertanyaan yang jarang diajukan tepat waktu: bagaimana kita tahu semua keputusan arsitektur ini benar? Bukan benar secara teori, tapi layak terhadap requirement nyata yang akan dihadapi sistem dua tahun ke depan.
Jawaban profesionalnya bukan intuisi senior semata. Ada metode terstruktur — ATAM (Architecture Tradeoff Analysis Method) — yang sudah dipakai industri selama dua dekade, dan ada generasi penerusnya di era DevOps: fitness functions, penilaian arsitektur yang berjalan otomatis di setiap build. Episode ini menyatukan keduanya dengan satu tujuan: menemukan risiko arsitektur saat harganya masih murah — di meja review, bukan di incident bridge.
Karakter arsitektur bersifat cross-cutting: performa, keamanan, dan modularity tidak hidup di satu file yang bisa dibaca reviewer — mereka tersebar di ribuan keputusan kecil. Kesalahan arsitektur pun punya kurva biaya paling brutal: salah pilih gaya komunikasi antar service hari ini = refactor lintas tim setahun kemudian.
Evaluasi eksplisit memberi tiga nilai:
ATAM penuh adalah proses multi-hari dengan evaluator eksternal. Yang dibutuhkan architect praktisi adalah inti metodenya, yang bisa dijalankan dalam setengah hari:
1. Presentasikan arsitektur → C4 container/component (ep6)
2. Kumpulkan skenario kualitas → utility tree, prioritas stakeholder
3. Petakan keputusan → skenario → bagaimana desain menjawab tiap
skenario prioritas tinggi?
4. Identifikasi sensitivity point → keputusan yang sangat memengaruhi
satu atribut kualitas
5. Identifikasi tradeoff point → keputusan yang saling menekan dua
atribut (cache: performa naik, konsistensi turun)
6. Daftarkan risks & non-risks → risiko terdokumentasi dengan rencana
mitigasi, bukan sekadar catatan rapatUtility tree menerjemahkan "kami ingin sistem cepat dan aman" yang kabur menjadi skenario terukur:
Performance
(H,M) Checkout p95 < 800ms pada 500 req/dtk peak flash sale
(H,H) Asisten AI TTFT < 2 dtk pada jam sibuk merchant
Security
(H,H) Kompromi satu pod tidak membaca data tenant lain
(M,L) Rotasi credential tanpa downtime
Modifiability
(H,M) Modul pricing baru rilis tanpa deploy ulang monolith penuh
Scalability
(M,M) Tambah 1000 tenant baru tanpa perubahan arsitekturNotasi (dampak, kesulitan) membantu fokus: skenario (H,H) dieksplorasi penuh — itulah tempat arsitektur paling mungkin retak. Perhatikan bahwa skenario kita bukan hipotetis: flash sale, noisy neighbor, dan TTFT asisten AI semuanya datang langsung dari episode 11, 20, dan 21.
Important
Skenario tanpa angka bukan skenario — ia harapan. "Sistem harus scalable" tak bisa dinilai; "tambah 1000 tenant tanpa redesign bisa" bisa. Jika sebuah skenario tidak bisa difalsifikasi dengan pengukuran, pertajam sampai bisa.
ATAM adalah snapshot titik waktu; arsitektur terus bergerak setelahnya. Fitness function adalah jawaban era modern: test otomatis yang memverifikasi karakteristik arsitektur di setiap build — istilah dari Building Evolutionary Architectures (Ford, Parsons, Kua).
Contoh konkret untuk studi kasus kita — menjaga boundary modul episode 7 tetap utuh secara otomatis:
import { rule } from "dependency-cruiser";
// aturan: modul transaksional tidak boleh saling import
const noCrossModule = {
name: "no-cross-module-import",
severity: "error",
from: { path: "^src/modules/(ordering|inventory|shipping)" },
to: {
path: "^src/modules/(ordering|inventory|shipping)",
pathNot:
"^src/modules/($1)/", // hanya boleh ke dirinya sendiri
},
};
// pelanggaran boundary gagal keras di CI —
// bukan catatan code review yang bisa dilewati
export default [noCrossModule];Pola fitness function yang layak diadopsi:
| Karakteristik | Fitness Function | Frekuensi |
|---|---|---|
| Modularity | Dependency rule test (di atas) | Tiap PR |
| API contract | Diff breaking change vs spec | Tiap PR |
| Performance | Budget test: checkout p95 di bawah 800ms di staging | Tiap PR / nightly |
| Resilience | Chaos drill terjadwal (ep16) | Mingguan |
| Security | SBOM scan + signature verify gate (ep19) | Tiap build |
| Cost | Alert budget harian per service (ep17) | Kontinu |
Tabel itu sebenarnya audit jejak series ini: setiap episode sudah meninggalkan satu fitness function. Itu bukan kebetulan — arsitektur yang baik selalu bisa dinyatakan sebagai aturan yang dapat diverifikasi.
Selain otomasi, manusia tetap dibutuhkan untuk hal yang tak bisa diotomasi — trade-off baru, konteks bisnis berubah, drift desain. Ritme yang sehat:
Keputusan evaluasi juga mengikuti prinsip reversibility: review mendalam untuk keputusan one-way door (gaya arsitektur, model data inti), ringan untuk two-way door.
Mari ratifikasi program evaluasi Acme:
mini_atam:
pemicu: inisiatif lintas modul / keputusan one-way door
peserta: architect, tech lead modul terkait, SRE, security
input: diagram C4 level component + utility tree update
output: daftar risk/non-risk + sensitivity/tradeoff points,
tiap risk punya owner dan mitigasi bertanggal
fitness_functions_ci:
- dependency-cruiser boundary rules (tiap PR)
- api contract diff vs OpenAPI (tiap PR)
- perf budget checkout p95 800ms staging (nightly)
- sbom scan fail-on high + cosign verify (tiap build)
quarterly_health_review:
agenda: drift diagram vs realitas, status ADR hygiene,
scorecard fitness functions, skenario baru dari insiden
output: update utility tree + backlog arsitektur berprioritas
post_incident:
aturan: setiap SEV1 menghasilkan minimal satu skenario baru
atau satu fitness function baru
metrik_program:
- jumlah risk tertutup per kuartal
- coverage: % aturan arsitektur yang terotomasiPerhatikan entri post_incident — aturan sederhana "setiap SEV1 menghasilkan satu skenario/fitness function baru" adalah cara sistem belajar dari kegagalannya, dan dalam setahun ke depan utility tree kalian akan didominasi skenario yang benar-benar terjadi, bukan tebakan.
Tip
Ukur kesehatan program evaluasi dengan rasio sederhana: dari semua aturan arsitektur penting kalian, berapa persen yang diverifikasi otomatis? Setiap kali aturan pindah dari "kesepakatan rapat" menjadi "test yang gagal keras", arsitektur kalian naik satu tingkat ketahanannya.
Inti yang harus dibawa pulang:
Di episode 23 selanjutnya kita naik satu tingkat abstraksi: platform & product architecture — bagaimana architect memikirkan internal platform sebagai produk, golden paths yang membuat developer jatuh cinta, dan metrik developer experience yang membuktikan nilainya. Sampai jumpa!