Di era pengembangan perangkat lunak modern, kemampuan untuk melakukan deploy fitur secara cepat dan aman menjadi sangat penting. Mengirimkan kode baru ke production tanpa persiapan matang berisiko menimbulkan downtime, bugs, atau bahkan dapat menimbulkan kerugian bisnis. Salah satu strategi yang kini banyak digunakan oleh tim engineering untuk meminimalkan risiko ini adalah feature flags atau sering juga disebut feature toggles.

Apa itu Feature Flags?

Feature flag adalah teknik untuk melakukan kontrol aplikasi di mana fitur baru dapat diaktifkan atau dinonaktifkan melalui sebuah “saklar” pada level kode. Artinya, kode fitur baru sebenarnya sudah ada di dalam aplikasi, namun kemunculannya bisa diatur secara dinamis, baik untuk kelompok pengguna tertentu, waktu tertentu, maupun kondisi lain yang ditentukan.

Secara sederhana, feature flag adalah conditional statement (if, switch, dll.) yang digunakan untuk mengontrol perilaku aplikasi berdasarkan status sebuah flag. Flag ini bisa dikendalikan lewat konfigurasi, bukan kode, jadi kamu tidak perlu commit atau deploy ulang setiap kali mau mengaktifkan atau nonaktifkan suatu fitur.

Berikut contoh sederana pada kode untuk mendefinisikan feature flag

if FEATURE_X_ENABLED:

tampilkan_fitur_x()

else:

tampilkan_fitur_lama()

 

Manfaat Feature Flags?

Penggunaan feature flags memberikan banyak keuntungan strategis. Sebagai contoh, fitur baru dapat dirilis secara bertahap ke sebagian kecil pengguna, teknik ini juga dikenal sebagai gradual rollout atau canary release. Hal ini memungkinkan tim memantau performa dan stabilitas fitur sebelum kemudian dirilis secara luas. Selain itu, feature flags mempermudah pelaksanaan A/B testing, sehingga tim produk dapat mengukur efektivitas dua versi fitur yang berbeda secara langsung di lingkungan produksi. Hal ini dapat membantu perusahaan mengambil keputusan mengenai versi mana yang paling efektif bagi user. Jika masalah muncul, flag dapat segera dimatikan, sehingga rollback tidak lagi memerlukan redeploy kode. Dengan cara ini, praktik continuous deployment menjadi lebih aman dan efisien.

Bagaimana sebenarnya Feature Flags bekerja

Bayangkan kamu sedang mengembangkan aplikasi yang digunakan ribuan orang setiap harinya. Di balik layar, kamu ingin mencoba fitur baru, katakanlah, dark mode yang lebih canggih. Tapi, dengan berbagai pertimbangan kamu belum siap menunjukkannya ke semua orang. Nah, di sinilah peran feature flag jadi penting.

Untuk proyek kecil atau tahap awal, biasanya cukup menyimpan flag di file konfigurasi seperti .env atau config.json. Mudah diatur dan cocok untuk pengembangan lokal. Tapi begitu aplikasi kamu mulai tumbuh dan butuh kontrol yang lebih fleksibel, barulah kamu bisa pindah ke sistem yang lebih dinamis, misalnya menyimpan flag di database, atau bahkan menggunakan layanan eksternal yang dirancang khusus untuk mengelola feature flag.

Terdapat beberapa tools yang dapat digunakan untuk mengelola feature flags. beberapa contohnya seperti LaunchDarkly, ConfigCat, atau Firebase Remote Config memungkinkan kamu untuk mengatur flag secara real-time. Melalui dashboard yang mereka sediakan, kamu bisa memilih siapa saja yang bisa melihat fitur tertentu tanpa harus menulis ulang kode atau melakukan deploy ulang.

Hal yang menarik lagi dari konsep ini adalah bahwa flag tidak harus bersifat global. Kamu bisa mengatur kondisi aktivasi berdasarkan berbagai kriteria. Misalnya, hanya user dengan role “admin” yang bisa melihat fitur beta. Atau, hanya user dari wilayah tertentu yang bisa melihat, contohnya hanya pengguna dari Indonesia saja yang dapat mencoba fitur promosi khusus hari kemerdekaan 17 Agustus, dan seterusnya.

Ada juga kasus di mana fitur diaktifkan berdasarkan waktu. Mungkin kamu ingin fitur itu hanya muncul selama jam kerja, atau hanya aktif selama masa uji coba tertentu. Bahkan, kamu bisa menerapkan sistem random sampling, seperti membagi user ke dalam grup berbeda untuk A/B testing tanpa mereka sadari bahwa mereka sedang berpartisipasi dalam eksperimen desain aplikasi ini.

Dengan semua fleksibilitas ini, feature flag memberikan kontrol penuh kepada developer dan tim produk untuk bereksperimen, meminimalkan risiko, dan belajar dari data nyata sebelum membuat keputusan besar.

Bagaimana sebenarnya Feature Flags bekerja

Meski powerful, feature flags juga memiliki tantangan. Salah satunya adalah fenomena flag rot, yaitu flag usang yang lupa dihapus dan akhirnya membuat kode menjadi rumit. Terlalu banyak logika percabangan akibat flag yang berlapis juga bisa meningkatkan risiko bug tersembunyi. Oleh karena itu, penting untuk menerapkan best practice, seperti mendokumentasikan setiap flag, memberi timeline penghapusan, dan memisahkan flag untuk rilis fitur dari flag operasional.

Selain itu, keamanan dan privasi juga harus diperhatikan. Pastikan bahwa data pengguna tidak terekspos hanya karena sebuah fitur baru diaktifkan tanpa proteksi yang cukup. Feature flag juga bisa memunculkan ketergantungan tim terhadap flag tertentu.

Kesimpulan

Feature flags telah menjadi salah satu bagian penting dalam strategi progressive delivery dan modern DevOps practices. Dengan kemampuan mengontrol perilaku aplikasi secara real-time, tim engineering dapat berinovasi lebih cepat tanpa mengorbankan kualitas. Namun, agar efektif, penggunaan feature flags harus diimbangi dengan disiplin dalam dokumentasi, pengujian, dan penghapusan flag usang.

Penulis 

Muhammad Alfhi Saputra, S.Kom., M.Kom. – FDP Scholar 

Referensi

https://martinfowler.com/articles/feature-toggles.html

https://medium.com/jonathans-musings/feature-flags-101-674993352119

https://www.optimizely.com/optimization-glossary/feature-flags/