Belajar membedah functional dan non-functional requirements, menulis NFR yang benar-benar terukur, mengenali constraint yang membatasi desain, lalu menyusun traceability matrix yang menghubungkan setiap requirement ke komponen solusi hingga cara verifikasinya

Setelah di episode 2 kita punya proses solution design — requirement → design → validation → delivery — dan kerangka SDD pertama kalian, kini kita masuk ke fase paling menentukan: requirement. Ini fondasi seluruh bangunan. Desain sebagus apa pun akan gagal jika dibangun di atas requirement yang salah baca, terlalu kabur, atau tidak lengkap.
Mengapa episode ini penting? Karena dalam praktiknya, stakeholder jarang memberi requirement yang rapi. Mereka memberi cerita, keluhan, dan permintaan solusi ("kita butuh aplikasi kayak Tokopedia tapi buat internal"). Tugas SA adalah mengekstrak dari sana dua hal: apa yang harus dilakukan sistem (functional), dan seberapa baik ia melakukannya (non-functional) — lalu mengubahnya menjadi keputusan desain yang bisa dipertanggungjawabkan.
Dua kategori ini adalah ABC requirement engineering:
| Aspek | Functional (FR) | Non-Functional (NFR) |
|---|---|---|
| Menjawab | Apa yang sistem lakukan? | Seberapa baik sistem melakukannya? |
| Contoh | User bisa reset password via email | Reset password tuntas < 5 detik pada 10.000 req/menit |
| Sifat | Fitur yang bisa didemokan | Karakteristik lintas fitur |
| Kalau hilang | Sistem tidak lengkap | Sistem jalan, lalu gagal di dunia nyata |
Perhatikan contoh NFR di tabel: ia selalu membawa angka dan kondisi ukur. NFR tanpa angka bukan requirement, melainkan harapan — dan harapan tidak bisa diverifikasi saat review.
NFR utama yang wajib kalian kenal:
Formula praktis: metrik + target + kondisi. Bandingkan pasangan berikut:
BURUK : "Sistem harus cepat dan andal."
BAIK : "API checkout merespons p95 <= 300 ms pada 1.000 req/detik."
BURUK : "Data tidak boleh hilang."
BAIK : "RPO database transaksional <= 5 menit; durability >= 99,999999999% (11 sembilan)."Tabel konversi availability ke angka nyata — hafalkan ini, sering muncul di meeting:
| Availability | Downtime/bulan | Implikasi Desain |
|---|---|---|
| 99% ("two nines") | ± 7,3 jam | Boleh satu server, restart malam hari |
| 99,9% | ± 43 menit | Multi-AZ, health check, auto-recovery |
| 99,99% | ± 4,3 menit | Multi-region aktif, zero-downtime deploy |
| 99,999% | ± 26 detik | Redundansi penuh, biaya melonjak drastis |
Warning
Setiap sembilan tambahan pada availability umumnya menggandakan atau lebih biaya infrastruktur. Tanyakan selalu: berapa kerugian riil per jam downtime? Jika jawabannya kecil, jangan bayar untuk lima sembilan.
Selain requirement, desain dibentuk oleh constraints — hal-hal yang tidak bisa dinegosiasikan:
Catat constraints eksplisit di bagian 2c template SDD kalian. Constraint yang tidak tertulis akan kembali sebagai konflik di tengah proyek.
Jantung episode ini adalah latihan menghubungkan requirement ke solusi. Ambil studi kasus di episode 2 — sistem tiket event 50.000 user serentak — dan susun requirement-nya:
FR-01 : Pembeli dapat mencari event dan melihat detail.
FR-02 : Pembeli dapat memesan kursi dengan seat-lock selama 10 menit.
FR-03 : Sistem menerbitkan e-tiket QR unik setelah pembayaran sukses.
FR-04 : Panitia dapat memindai QR untuk validasi masuk gerbang.
NFR-01 : API search p95 <= 200 ms pada 5.000 req/detik.
NFR-02 : Checkout tahan lonjakan 50.000 user serentak tanpa error rate > 0,1%.
NFR-03 : Availability 99,95% selama window penjualan.
NFR-04 : Data pembayaran terenkripsi dan sesuai standar PCI-DSS.
C-01 : Budget infrastruktur <= 40 juta/bulan.
C-02 : Launch 90 hari, tim 6 engineer, familiar Node.js dan PostgreSQL.
C-03 : Semua data PDP-related tersimpan di region Jakarta.Lalu buat traceability matrix — tabel yang menjawab "komponen mana yang memenuhi requirement ini, dan bagaimana kita tahu itu benar?":
| ID | Requirement | Keputusan Solusi | Verifikasi |
|---|---|---|---|
| FR-02/NFR-02 | Seat lock, lonjakan 50rb user | Queue antrean pembelian + cache seat map (Redis) | Load test 50k virtual user |
| FR-03/NFR-04 | E-tiket QR aman | Service tiket sign token JWT + storage terenkripsi | Uji tanda tangan + audit enkripsi |
| NFR-01 | Search p95 ≤ 200 ms | Search engine terpisah (OpenSearch), index asinkron | Benchmark p95 per rilis |
| NFR-03 | 99,95% di window sale | Multi-AZ, autoscaling pre-warmed sebelum event | Chaos test + drill scaling |
| C-03 | Data di region Jakarta | Region ap-southeast-3 untuk semua datastore | Review IaC config |
Baca matrix itu dari kanan ke kiri juga: kalau sebuah keputusan solusi tidak mendukung requirement mana pun, itu gold plating — buang. Kalau ada requirement tanpa keputusan, itu celah desain — isi. Matrix inilah alat komunikasi terkuat SA ke reviewer: setiap kotak sistem punya alasan eksistensi.
Inti yang harus dibawa pulang:
Di episode 4 selanjutnya kita akan membahas architecture selection & trade-offs — cara membandingkan monolith, microservices, serverless, dan event-driven secara objektif lewat weighted scoring matrix, serta menuliskan keputusan kalian dalam ADR. Sampai jumpa di episode 4!