Proyek penutup jalur ini mengerjakan satu desain sistem secara utuh pada empat topik dengan produk yang sama, dan keputusan pertamanya menentukan seluruh arah pengerjaan, yaitu produk apa yang didesain dan di mana batasnya. Topik ini membahas kriteria pemilihan produk, menerapkannya pada beberapa kandidat generik, kemudian menetapkan produk terpilih beserta pernyataan lingkupnya. Hasil yang diperoleh adalah satu keputusan yang digunakan secara konsisten sampai akhir proyek, yaitu aplikasi catatan dengan lampiran dan pencarian, beserta daftar hal yang masuk dan yang sengaja dikeluarkan dari lingkup.
Kriteria pemilihan produk#
Produk yang dipilih untuk proyek desain memenuhi tiga kriteria. Pertama, produknya benar-benar digunakan sehari-hari, sehingga perilakunya dipahami dari pengalaman langsung dan tidak ada energi yang habis hanya untuk memahami domainnya. Kedua, lingkupnya dapat dinyatakan secara jujur, artinya inti produk mudah dipisahkan dari fitur pelengkapnya, sehingga pernyataan tentang apa yang masuk dan apa yang keluar tidak terasa dipaksakan. Ketiga, permukaan desainnya cukup luas, yaitu produk tersebut memaksa keputusan pada tiga bidang yang dipelajari jalur ini sekaligus, yakni baca-tulis data, penyimpanan berkas, dan pencarian.
Tiga bidang tersebut bukan pilihan acak. Baca-tulis data memaksa keputusan tentang basis data dan cache. Penyimpanan berkas memunculkan kebutuhan object storage yang perilakunya berbeda dengan basis data. Pencarian membawa pertanyaan tentang indeks dan pekerjaan latar yang berjalan di luar permintaan pengguna.
Produk yang hanya menghitung atau hanya menampilkan tidak pernah menyentuh ketiganya, sehingga proyeknya selesai sebelum satu pun tradeoff nyata muncul. Tabel berikut menerapkan ketiga kriteria pada kandidat generik yang tidak terikat pada merek tertentu.
| Kandidat generik | Digunakan sehari-hari | Lingkup dapat dinyatakan jujur | Permukaan desain cukup |
|---|---|---|---|
| Kalkulator | ya | ya | tidak, hampir tanpa penyimpanan data |
| Penghitung kata | ya | ya | tidak, satu fungsi tanpa data yang tersimpan |
| Jadwal piket bersama | sebagian | tidak mudah, kolaborasinya cenderung melebar | sebagian, tanpa berkas |
| Aplikasi catatan | ya | ya | ya, memuat ketiga bidang |
Tabel tersebut menutup seleksinya dengan cepat. Kalkulator dan penghitung kata memenuhi dua kriteria pertama, tetapi keduanya tidak menyimpan data yang berarti, sehingga desainnya berhenti pada satu layanan kecil. Jadwal piket bersama menyimpan data, tetapi fitur kolaborasinya mudah melebar, dan kejujuran lingkupnya bergantung pada kesepakatan yang makin rumit. Aplikasi catatan memenuhi ketiga kriteria sekaligus, sehingga kandidat inilah yang dilanjutkan.
Produk yang dipilih: aplikasi catatan#
Produk terpilih adalah aplikasi catatan pribadi yang berjalan di browser. Pengguna membuat catatan teks pendek, menyunting dan menghapusnya, melampirkan berkas seperti foto atau dokumen, kemudian menemukan kembali catatannya melalui pencarian kata pada judul dan isi. Setiap akun hanya melihat catatannya sendiri, sehingga model datanya sederhana, yaitu catatan dimiliki satu pengguna dan tidak dibagikan kepada siapa pun.
Karena permukaan desainnya lengkap, setiap bidang pada jalur ini mendapat tempatnya. Operasi baca jauh lebih sering daripada tulis, dan pembacaan yang berulang itulah alasan cache masuk ke desain. Profil baca yang dominan inilah yang nantinya dinyatakan sebagai delapan dari sepuluh permintaan pada estimasi. Lampiran berukuran jauh lebih besar daripada teks catatan dan tidak pernah diubah secara parsial, sehingga object storage lebih tepat daripada menyimpan berkas di dalam basis data. Pencarian yang tidak ketat membutuhkan indeks, dan indeks yang dibangun sebagai pekerjaan latar membutuhkan queue. Setiap kebutuhan ini nantinya dibuktikan dengan angka, bukan dengan selera, sehingga kotak pada diagram desain dapat mempertanggungjawabkan hadirnya.
Lingkup yang masuk dan yang dikeluarkan#
Pernyataan lingkup aplikasi catatan ini terdiri atas dua daftar yang berdampingan, karena satu daftar saja tidak menggambarkan batas dengan lengkap.
| Masuk dalam lingkup | Dikeluarkan dari lingkup |
|---|---|
| Catatan teks yang dibuat, disunting, dan dihapus per akun | Kolaborasi real-time, yaitu penyuntingan bersama pada satu catatan |
| Lampiran berkas hingga beberapa megabyte per berkas | Berbagi catatan antarpengguna |
| Pencarian kata pada judul dan isi catatan | Penyuntingan luring dengan sinkronisasi antarperangkat |
| Aplikasi web dengan otentikasi satu akun | Riwayat versi catatan |
Pengecualian terbesar adalah kolaborasi real-time. Fitur ini menuntut penggabungan suntingan yang bersamaan, penyelesaian konflik, dan kanal komunikasi dua arah antara browser dan server. Begitu fitur ini masuk, sebagian besar keputusan penyimpanan berubah bentuk, karena catatan tidak lagi diperbarui secara utuh oleh satu penulis. Pengecualian lain mengikuti alasan yang sama, yaitu masing-masing memuat mekanisme yang berdiri sendiri dan bukan inti dari produk catatan pribadi.
Produk catatan nyata biasanya memiliki beberapa fitur yang dikeluarkan di atas, sehingga kejujuran lingkupnya penting dinyatakan sejak awal. Lingkup yang dikeluarkan bukan berarti fitur itu mustahil dibuat, melainkan bukan bagian dari proyek ini. Batas semacam ini melindungi empat topik proyek dari keputusan yang berubah di tengah jalan, karena setiap komponen yang ditambah kemudian memaksa sebagian desain dihitung ulang dari awal.
Kesalahan umum#
Tiga kesalahan berikut paling sering menggagalkan tahap pemilihan produk, dan ketiganya baru terasa setelah desain berjalan, sehingga lebih murah dicegah sejak awal.
- Memilih produk yang tidak digunakan sehari-hari. Perilaku produknya hanya dipahami dari deskripsi sekilas, sehingga asumsi pada desain mudah meleset, misalnya asumsi ukuran data dan pola aksesnya. Perbaikannya, pilih produk yang benar-benar dikenal dari penggunaannya, karena pemahaman perilaku tersebut tidak dapat digantikan oleh spesifikasi.
- Menulis daftar cakupan tanpa daftar pengecualian. Batas lingkup yang hanya dinyatakan dari satu sisi mengambang, karena pihak lain tidak mengetahui fitur mana yang sengaja ditunda. Perbaikannya, tulis kedua daftarnya berdampingan dan sertakan alasan singkat pada setiap pengecualian.
- Menambah lingkup setelah desain dimulai. Satu fitur tambahan jarang berdiri sendiri, karena menyentuh penyimpanan, API, dan estimasi yang sudah selesai dihitung. Perbaikannya, catat fitur baru sebagai kandidat revisi proyek berikutnya, lalu selesaikan lingkup yang ada sampai tuntas, karena proyek yang selesai dengan lingkup penuh lebih berharga daripada proyek yang luas tetapi berhenti di tengah.
Ringkasan#
- Tiga kriteria pemilihan produk adalah digunakan sehari-hari, lingkupnya dapat dinyatakan secara jujur, dan permukaan desainnya memuat baca-tulis data, penyimpanan berkas, serta pencarian.
- Produk terpilih adalah aplikasi catatan pribadi di browser dengan lampiran dan pencarian kata, dengan satu akun untuk satu pengguna.
- Lingkup masuk meliputi catatan teks, lampiran, pencarian, dan otentikasi satu akun, sedangkan lingkup keluar meliputi kolaborasi real-time, berbagi antar pengguna, penyuntingan luring, dan riwayat versi.
- Keempat topik proyek ini menggunakan produk dan batas lingkup yang sama, sehingga keputusan desain tidak berubah di tengah jalan.
Referensi#
- The System Design Primer — Donnemartin (GitHub) — Kumpulan materi desain sistem yang memuat urutan menyiapkan kebutuhan sebelum gambar komponen dibuat.
- Minimum viable product — Wikipedia — Konsep versi terkecil dari sebuah produk yang masih dapat digunakan, landasan pernyataan lingkup yang jujur.