Mengubah quality attributes dari daftar kata menjadi spesifikasi terukur: format quality scenario SEI, tactics untuk performance, scalability, reliability, security, dan maintainability, beserta trade-off harga setiap tactic — dipraktikkan pada skenario flash sale

Setelah di episode 4 kita menurunkan arsitektur ke level desain — SOLID, pattern GoF, dan bounded context DDD — pada episode ini kita kembali ke quality attributes, tetapi kali ini secara engineering: dari kata-kata seperti "harus cepat" menjadi angka yang bisa diverifikasi.
Ini keterampilan paling membedakan architect dari developer senior. Developer mengukur keberhasilan dengan "fiturnya jalan"; architect mengukur dengan atribut non-fungsional yang dituntut. Dan karena semua attribute saling berebut (hukum trade-off episode 2), kalian butuh format standar untuk menyatakannya agar bisa dinegosiasikan dengan stakeholder dan diverifikasi oleh sistem.
SEI (Software Engineering Institute, CMU) menyediakan format enam bagian untuk setiap persyaratan kualitas:
| Elemen | Arti | Contoh |
|---|---|---|
| Source | Siapa yang memicu | Pengguna menekan tombol checkout |
| Stimulus | Kejadian apa | Submit order saat flash sale |
| Artifact | Bagian sistem mana | Endpoint POST /orders |
| Environment | Kondisi sistem saat itu | Beban puncak 10x normal |
| Response | Sistem harus melakukan apa | Order diterima & dikonfirmasi |
| Response measure | Ukuran keberhasilan | p99 latency ≤ 800 ms; error rate ≤ 0.1% |
Tanpa response measure, persyaratan kualitas tidak bisa diuji — ia hanya opini. "Sistem harus cepat" tidak berarti apa-apa; "p99 read path ≤ 300 ms pada 500 rps" adalah kontrak yang bisa dilanggar, dipantau, dan dievaluasi.
Important
Kebiasaan wajib: setiap kali stakeholder berkata "cepat", "andal", atau "aman", balas dengan pertanyaan terukur — seberapa cepat, di kondisi beban apa, gagal berapa persen masih boleh. Jawabannya adalah quality scenario kalian. Tanpa itu, tim akan menebak-nebak dan biasanya menebak terlalu mahal.
Performance tentang kecepatan merespons satu request. Metrik utamanya:
Tactics utama:
Reduce demand → lazy load, pagination, field selection
Manage resource → connection pooling, thread pool sizing
Introduce cache → CDN, app-level cache, buffer
Process async → antrikan pekerjaan berat, balik cepatSetiap tactic punya harga: cache menambah masalah invalidasi, async menambah final consistency, pooling menambah tuning. Tidak ada yang gratis.
Scalability tentang kemampuan menangani beban bertambah — bukan kecepatan satu request.
Vertical (naikkan spek mesin) mudah tapi mentok dan single point of failure. Horizontal (tambah instance) tak terbatas teoretis tapi menuntut statelessness: sesi tidak boleh menempel di memori satu instance — simpan di Redis atau token stateless.
Ketika satu database mentok, pecahkan data:
Aturan emasnya: pilih partition key yang membuat query umum menyentuh satu partisi, bukan menyapu semuanya.
L4 (transport) cepat tapi buta isi request; L7 (application) paham URL/header sehingga bisa routing cerdas dan health check granular. Kombinasi keduanya standar di produksi.
Availability diukur dalam nines — dan tabel ini wajib melekat di kepala:
| Availability | Downtime/Tahun | Arti Praktis |
|---|---|---|
| 99% | ±3,65 hari | Aplikasi internal saja |
| 99,9% | ±8,8 jam | Standar aplikasi bisnis |
| 99,95% | ±4,4 jam | Jalur checkout e-commerce |
| 99,99% | ±52 menit | Payment, healthcare kritis |
Insight penting: naik dari 99% ke 99,9% bisa dicapai dengan disiplin engineering biasa; naik ke 99,99% melipatgandakan biaya (multi-region, replikasi, on-call). Inilah kenapa target harus eksplisit.
Reliability lebih luas dari availability — sistem bisa "hidup" tapi salah hasil. Kuncinya redundancy + failure detection + failover otomatis, plus dua metrik pemulihan: MTBF (berapa sering rusak) dan MTTR (berapa lama pulih). Arsitek modern sering mengoptimalkan MTTR dulu karena lebih murah daripada mengejar MTBF sempurna.
Security scenario juga bisa diformat: stimulus = percobaan akses tanpa otorisasi, response measure = 100% ditolak + tercatat audit dalam ≤ 1 detik.
Tactics inti:
Episode 10 membahas security architecture tuntas termasuk threat modeling; di sini cukup dipahami sebagai attribute yang ikut dinegosiasikan dan diukur.
Tiga attribute yang sering diremehkan padahal menentukan kecepatan tim jangka panjang:
Industri modern mengukurnya via DORA metrics (deployment frequency, lead time for changes, change failure rate, MTTR). Menariknya, ketiga attribute ini hampir selalu dilayani oleh keputusan yang sama: modularitas yang baik, automation pipeline, dan infrastruktur reproducible.
Tip
Saat dua attribute berebut satu keputusan (misal konsistensi kuat vs latency rendah), tulis kedua scenario lengkap dengan ukurannya, lalu bawa ke stakeholder: "opsi A gagal scenario X, opsi B gagal scenario Y". Percakapan bergeser dari selera pribadi ke data — itulah fungsi utama quality scenario.
Mari tulis scenario lengkap untuk kasus paling kritis studi kasus kita — checkout saat flash sale:
scenario: checkout-saat-flash-sale
source: pengguna menekan tombol bayar
stimulus: POST /orders dengan item flash sale
artifact: ordering module + payment integration
environment: traffic 10x normal, cache hangat
response:
- order dibuat dengan status PENDING_PAYMENT
- stok direservasi atomik (tidak oversell)
- charge ke payment gateway dipicu
response_measures:
availability: jalur checkout ≥ 99.95% selama event
latency: p99 ≤ 800 ms sampai respons diterima user
correctness: oversell = 0; double-charge = 0
degradation: jika inventory lambat, tolak dengan pesan jelas
dalam ≤ 2 detik, jangan diam-diam hangPerhatikan baris terakhir — graceful degradation adalah response yang dirancang, bukan kebetulan. Sistem yang baik saat beban puncak bukan yang tidak pernah kesulitan, melainkan yang kesulitannya terlihat rapi bagi pengguna.
Dari scenario inilah tactics dipilih: reservasi stok atomik di database (consistency), async charge dengan idempotency key (latency + correctness), circuit breaker ke gateway (degradation), autoscaling dengan headroom 2x (availability).
Inti yang harus dibawa pulang:
Di episode 6 selanjutnya kita bahas architecture documentation — model C4 untuk menggambar arsitektur secara efektif dan Architecture Decision Records untuk mencatat keputusan-keputusan yang lahir dari scenario-scenario ini, termasuk praktik menulis ADR pertama untuk studi kasus kita. Sampai jumpa!