Apa itu feature flagging?
Feature flagging adalah pola desain pemrograman sederhana yang memungkinkan developer untuk mengaktifkan atau menonaktifkan fitur aplikasi tanpa harus melakukan redeploy atau mengubah kode yang sudah ada di lingkungan produksi. Dengan membungkus kode menggunakan feature flag, developer bisa memisahkan proses peluncuran fitur dari proses deployment. Feature flag ini juga sering disebut sebagai feature toggle, feature switch, atau feature flipper.
Feature flag bisa diterapkan di berbagai proyek baik infrastruktur, backend, maupun frontend, dan sering digunakan untuk mengirimkan fitur baru ke pengguna dengan cepat. Daripada merilis fitur baru bersamaan dengan versi besar aplikasi, developer bisa menggunakan feature flag untuk menguji fitur tersebut hanya ke sebagian pengguna terlebih dahulu. Cara ini memungkinkan proses rilis software jadi lebih cepat dan risikonya lebih kecil.
Bagaimana cara kerja feature flagging?
Feature flagging mengubah perilaku runtime dari sebuah aplikasi berdasarkan konfigurasi yang digunakan. Setelah fitur ditandai dengan flag di dalam kode, administrator bisa menentukan siapa saja pengguna yang akan melihat fitur tersebut. Konfigurasinya bisa dilakukan berdasarkan:
- Atribut pengguna, seperti lokasi geografis, nama, atau level keanggotaan;
- Lingkungan, seperti mesin atau alamat IP tertentu;
- Secara acak, misalnya hanya 10% dari seluruh pengguna;
- Perilaku tertentu, misalnya aktivitas media sosial.
Beberapa feature flag dirancang untuk penggunaan jangka pendek (misalnya untuk rilis fitur baru), ada juga yang untuk jangka panjang seperti untuk lisensi dan harga. Ada pula flag jangka menengah, misalnya untuk pengembangan fitur dalam jangka panjang.
Pengembangan feature flag
Saat mulai mengintegrasikan feature flag ke proses pengembangan, ada beberapa hal yang perlu dipertimbangkan. Pertama, kenali masalah atau hambatan yang sering muncul. Lalu identifikasi use case penggunaan feature flag di sistem kamu. Siapa saja stakeholder-nya selain developer? Dan bagaimana tim bisa berkolaborasi agar implementasi feature flag ini berhasil?
Kemudian, putuskan apakah ingin membangun sistem feature flag sendiri atau menggunakan tools dari pihak ketiga. Perhatikan faktor seperti compliance, total cost of ownership, dan dukungan terhadap banyak bahasa pemrograman. Karena umumnya perusahaan menggunakan berbagai library dan bahasa dalam stack-nya, maka sistem feature flag harus fleksibel dan tidak menurunkan performa.
Setelah keputusan dibuat, tim bisa mulai mengatur workflow dan mengimplementasikan sistem feature flag. Kolaborasi tim sangat penting selama proses ini, termasuk memberikan feedback dan mengelola lifecycle rilis secara penuh.
Feature flag itu murah dan gampang dibuat, tapi bisa cepat menumpuk. Semakin banyak flag, semakin rumit juga pengelolaannya. Flag yang sudah tidak digunakan sebaiknya segera dihapus agar tidak menambah beban pengujian dan kompleksitas kode.
Manajemen feature flag
Karena biasanya ada banyak flag yang digunakan sekaligus, ini bisa meningkatkan trafik dan membuat kode jadi lebih sulit untuk diuji, dirawat, dan diamankan. Oleh karena itu, organisasi perlu punya rencana manajemen feature flag yang mencakup:
- Tanggung jawab dalam pembuatan, perubahan, permintaan, peluncuran, dan penghapusan flag;
- Standar penamaan flag, supaya mudah dipahami dan dikenali oleh developer lainnya di masa depan;
- Proses penting seperti test-first approach, yaitu mengaktifkan flag hanya untuk developer/admin terlebih dahulu sebelum ke user lain.
Sistem dengan feature flag juga harus menunjukkan status konfigurasi flag saat ini. Misalnya dengan memasukkan nomor build atau versi ke dalam artifact dan menampilkan metadata, agar tester bisa tahu versi mana yang sedang berjalan di lingkungan tertentu.
Tiap flag juga sebaiknya dikelola secara berbeda sesuai jenisnya, karena meskipun teknologi kontrolnya sama, perilaku dan tujuan setiap flag bisa berbeda.
Untuk membantu mengatur flag, tersedia berbagai platform manajemen fitur (feature management platform) atau feature flag management system. Tools ini membantu mengurangi technical debt dan biasanya menyediakan notifikasi perubahan flag, manajemen rollout, monitoring KPI, serta fitur kill switch. Ada yang open source dan ada juga yang berbayar dengan model langganan bulanan atau berdasarkan jumlah pengguna/flag.
Implementasi dan manfaat feature flag
Feature flagging punya banyak manfaat tergantung bagaimana implementasinya. Beberapa contoh penggunaan:
- Kontrol rilis fitur. Developer bisa menggabungkan, menguji, dan mendistribusikan kode ke produksi, lalu menyalakan fitur ke pengguna kapan saja.
- A/B testing. Administrator bisa membagi user ke dalam grup dan mengatur flow berbeda untuk menguji performa fitur baru.
- Fitur musiman/sementara. Developer bisa mengaktifkan fitur di waktu tertentu (misal saat promo) atau menonaktifkannya saat trafik tinggi.
- Pemblokiran pengguna. Fitur tertentu bisa dibatasi hanya untuk grup user tertentu berdasarkan regulasi seperti lokasi geografis.
- Langganan. Konten atau fitur eksklusif bisa diatur berdasarkan status langganan pengguna.
- Kill switch. Jika fitur bermasalah, bisa langsung dimatikan tanpa harus rollback seluruh rilis. Ini bisa dikombinasikan dengan rollout bertahap supaya dampak negatifnya minimal.
Canary release
Rollout persentase juga digunakan dalam teknik canary release, yaitu metode pengujian dampak fitur baru terhadap perilaku pengguna. Developer bisa mengaktifkan fitur hanya untuk 1% pengguna terlebih dahulu (disebut cohort), lalu memantau metrik bisnis penting seperti pendapatan atau engagement.
Jika hasilnya aman dan tidak ada dampak negatif, barulah fitur bisa diaktifkan untuk seluruh pengguna lainnya secara bertahap.