YAGNI
Apa yang pertama kali kamu pikirkan saat mendengar kata YAGNI? Nama orang? Bukan. Ini adalah salah satu prinsip dalam pengembangan software: singkatan dari "You Aren't Gonna Need It". Sebuah prinsip yang selalu menjadi rem saat mengembangkan aplikasi.
Saat mengembangkan sebuah aplikasi, seorang programmer cukup sering terinspirasi untuk menambahkan fitur baru. "Wah kayaknya tambah fitur ini bisa nih," atau "fitur ini kayaknya perlu juga untuk ditambahin." Semua dikerjakan tanpa mempertanyakan apakah fitur tersebut benar-benar dibutuhkan oleh pengguna.
YAGNI berfokus pada apa yang kita miliki saat ini dan permasalahan apa yang hendak diselesaikan dengan aplikasi yang kita kembangkan. Supaya lebih jelas, mari ambil contoh produk saya sendiri: DigiDig.
Tujuan Utama
DigiDig saya buat karena saya ingin punya platform yang sederhana untuk blogging dan jualan produk digital dengan syarat resource usage-nya tidak terlalu besar.
Oleh karena itu, aplikasi ini harus dikembangkan menggunakan tech stack yang cukup sederhana. Ruby on Rails, meskipun ini framework andalan saya, terpaksa harus saya keluarkan dari opsi karena memory usage-nya terlalu besar. Saya memutuskan untuk menggunakan Padrino karena memory usage-nya cukup kecil dan bisa saya toleransi. Saya menulis tentang ini di sini.
Selain itu, karena yang saya bangun adalah platform blogging dan jualan produk digital, fitur manajemen postingan, manajemen halaman, manajemen navlink, serta manajemen produk adalah empat fitur utama yang wajib ada. Ini tidak bisa ditawar lagi.
Tapi… produk digital itu ada banyak. Salah satunya adalah e-course. Idealnya, platform yang saya kembangkan ini mendukung e-course juga. Tapi saat ini tidak saya kembangkan, setidaknya belum. Ini karena saya tidak punya produk e-course. Jadi... YAGNI.
Skenario lain: download produk digital. Misalnya, download e-book. Di DigiDig, link produk digital diamankan dengan mekanisme limit jumlah download dan kedaluwarsa link download. Bisa saja saya menambahkan watermark nama pembeli di setiap e-book yang diunduh supaya lebih mudah dalam melacak pembajakan. Tapi kalau memang sudah niat, pembajak tersebut pasti akan mencari cara untuk menghilangkan watermark tersebut. Jadi... YAGNI.
Tanpa prinsip YAGNI, mungkin DigiDig akan jadi platform yang tidak sesuai dengan tujuan utama saya. Platform yang bloated dan terlalu banyak gamifikasi.
Apakah DigiDig Sendiri YAGNI?
Berbicara soal platform blogging dan jualan produk digital, sebenarnya WordPress dan WooCommerce menurut saya sudah sangat cukup. Apakah dengan begitu proyek DigiDig sendiri adalah YAGNI?
Bagi saya, tidak. Bukan karena saya pengembangnya, tapi karena saya sudah mencoba membuat toko online dengan WordPress dan WooCommerce, dan antarmukanya saya bisa bilang kurang ramah untuk orang awam. Terlalu banyak opsi yang harus dipilih. Antarmuka cukup jadul. Terlalu banyak menu yang tidak dibutuhkan tapi ada di WordPress. Untuk kasus ini, saya merasa WordPress terlalu bloated. Ini yang saya selesaikan di proyek DigiDig.
Mengembangkan software tidak harus selalu membuat fitur yang lebih lengkap. Bisa juga membuatnya jadi lebih sederhana dan nyaman untuk dipakai sehari-hari, dan prinsip YAGNI sangat penting di sini.
Untuk membuat software yang sederhana, prinsip YAGNI harus benar-benar dipegang teguh. Saat mendapatkan ide sebuah fitur, jangan langsung dikembangkan. Coba tanya dulu: apakah fitur ini benar-benar diperlukan? Apakah ada alternatif lain untuk menyelesaikan permasalahan tanpa harus mengembangkan fitur ini? Jika ada, apakah solusi tersebut bisa ditoleransi? Jika iya, maka YAGNI.
Mengatakan tidak untuk fitur yang diminta oleh klien memang sulit. Butuh keberanian untuk melakukannya. Tapi itu juga yang menjaga sebuah aplikasi supaya tetap sesuai dengan visi awalnya. Percayalah, tidak akan ada orang yang nyaman saat mengoperasikan software yang kompleks.
