Mengubah tumpukan catatan wawancara menjadi kebutuhan yang jelas: membedah functional vs non-functional requirements, menyusun acceptance criteria yang terukur, dan mengurutkan backlog dengan MoSCoW — dipraktikkan langsung pada requirement hasil gathering TokoKita

Setelah di episode 3 kalian menggali kebutuhan lewat interview, workshop, dan observasi — dan sudah punya daftar butir R1-R4 dari Bu Rina — sekarang saatnya mengolah bahan mentah itu. Episode ini membahas requirement analysis: memilah, merumuskan, menguji kualitas, dan memprioritaskan kebutuhan.
Mengapa tahap ini tidak boleh dilompati? Karena gathering tanpa analysis menghasilkan daftar keluhan, bukan spesifikasi. Developer tidak bisa membangun dari "kasir harus tetap bisa jalan pas internet mati" tanpa tahu persis apa artinya: berapa lama offline? data kemana? bagaimana sinkron ulang? Analysis adalah proses mengubah kata-kata stakeholder menjadi pernyataan yang jelas, terukur, dan dapat diverifikasi.
Dua kategori besar yang wajib kalian pisahkan sejak awal:
| Aspek | Functional Requirement | Non-Functional Requirement (NFR) |
|---|---|---|
| Menjawab | Apa yang sistem lakukan? | Seberapa baik sistem melakukannya? |
| Contoh TokoKita | Kasir mencatat transaksi & mencetak struk | Transaksi tersimpan maksimal 2 detik; sistem tetap hidup saat internet mati |
| Sumber | Proses bisnis & aturan | Pengalaman operasional, regulasi, arsitektur |
| Kalau diabaikan | Fitur hilang — langsung kelihatan | Sistem "jalan" tapi menyebalkan: lambat, down, bocor data |
| Cara verifikasi | Test fungsional scenario | Metrik: response time, uptime, throughput |
NFR adalah pihak yang paling sering dikorbankan karena tak terlihat di demo — dan paling sering membuat proyek gagal secara diam-diam. Kategori NFR standar yang layak kalian hafal: performance, availability/reliability, security, usability, scalability, compatibility/portability, maintainability, compliance.
Important
Aturan praktis menangkap NFR: setiap kali stakeholder bilang "cepat", "aman", "gampang dipakai", atau "harus selalu nyala" — itulah NFR mentah. Tugas kalian mengubahnya menjadi angka: cepat = di bawah 2 detik, selalu nyala = uptime 99,5% per bulan, dst.
Pernyataan kebutuhan yang baik punya empat sifat (sering disingkat agar clear, unambiguous, testable, traceable):
MENTAH (dari wawancara):
"Kasir harus tetap bisa jalan pas internet mati."
TERANALISIS:
FR-07: Saat koneksi internet tidak tersedia, aplikasi kasir
harus tetap dapat mencatat transaksi tunai dan QRIS
(mode offline), termasuk cetak struk dan pembaruan stok
pada basis data lokal.
NFR-03: Data transaksi offline harus tersinkronisasi otomatis ke
server pusat dalam waktu maksimal 60 detik setelah
koneksi pulih, tanpa duplikasi transaksi.Perhatikan tiga hal: bernomor (traceable), spesifik perilaku (testable), dan tidak menyebut solusi implementasi tertentu (biar tim dev yang memilih cara). Format kalimat yang lazim untuk FR:
[Aktor] harus dapat [aksi] [objek] [syarat/kendala].
Contoh: "Kasir harus dapat menerapkan diskon promo dengan batas persentase yang ditetapkan manajer cabang."
Acceptance criteria (AC) mendefinisikan kapan sebuah requirement dinyatakan selesai. Format populer adalah Gherkin (Given-When-Then):
Feature: Transaksi kasir mode offline
Scenario: Penjualan tunai saat internet mati
Given internet cabang sedang mati
And kasir sudah login sebelum koneksi putus
When kasir menyelesaikan penjualan tunai Rp 45.000
Then struk berhasil dicetak
And transaksi tersimpan di database lokal
And stok produk terpotong di database lokalAC yang baik bersifat biner: lulus atau tidak — tidak ada "agak selesai". Satu user story biasanya punya 3-7 AC.
Tidak semua kebutuhan sama pentingnya, dan resource pasti terbatas. MoSCoW membagi kebutuhan ke empat ember:
| Kategori | Arti | Konsekuensi Jika Tidak Ada |
|---|---|---|
| Must have | Gagal hukum/operasional tanpa ini | Rilis tidak boleh jalan |
| Should have | Sangat penting tapi ada jalan pintas sementara | Rilis sakit tapi bisa jalan |
| Could have | Nilai tambah jika ada sisa kapasitas | Rilis tetap sukses |
| Won't have (now) | Sadar ditunda ke rilis berikutnya | Bukan prioritas periode ini |
Aturan mainnya ketat: Must tidak boleh melebihi ±60% kapasitas — kalau semuanya Must, artinya belum diprioritaskan. Dan "Won't have" bukan pembuangan; ia dokumen eksplisit supaya stakeholder tidak mengira fiturnya lupa.
Ambil kebutuhan hasil episode 3 plus temuan lanjutan, lalu urutkan untuk rilis pilot satu cabang:
| ID | Kebutuhan (ringkas) | Kategori | Alasan |
|---|---|---|---|
| FR-01 | Kasir scan/input barang + hitung total | Must | Inti POS; tanpa ini bukan POS |
| FR-02 | Cetak struk + simpan transaksi | Must | Kewajiban operasional & pajak |
| FR-07 | Mode offline kasir | Must | Internet cabang sering padat/mati |
| FR-05 | Pemotongan stok real-time | Must | Akurasi stok = alasan utama proyek |
| FR-09 | Laporan penjualan harian per cabang | Should | Owner masih bisa minta manual mingguan |
| FR-11 | Manajemen promo/diskon bertingkat | Should | Promo awal cukup flat rate manual |
| FR-14 | Program member & poin | Could | Nilai besar tapi pilot bisa jalan tanpa |
| FR-16 | Integrasi supplier auto-order | Won't (now) | Ditunda ke fase 2 setelah stabil |
Teknik pendukung lain yang patut kalian kenal:
Tip
Uji cepat kualitas requirement kalian: serahkan satu FR + AC ke developer asing tanpa penjelasan verbal. Jika ia bisa menulis test case tanpa bertanya balik, requirement itu layak. Jika muncul minimal satu pertanyaan, peruncing lagi.
Inti yang harus dibawa pulang:
Di episode 5 selanjutnya kita membahas use cases & user stories: dua format populer menuliskan kebutuhan dari sudut pandang pengguna, kapan pakai yang mana, dan praktik menulis user stories untuk fitur kasir TokoKita sampai siap dimasukkan sprint. Pastikan tetap semangat!