Feature flag, juga disebut feature toggle, adalah kondisi dalam kode aplikasi yang menentukan pada saat runtime apakah suatu fungsi tertentu aktif untuk pengguna atau permintaan tertentu. Alih-alih fitur tersebut ada atau tidak tergantung pada versi kode yang digunakan, fitur tersebut ada dalam kode tetapi diaktifkan atau dinonaktifkan melalui konfigurasi. Hal ini memisahkan proses deployment dari rilis: kode dapat dikirim ke produksi secara terus menerus sementara fitur-fitur yang dikandungnya tetap tidak terlihat sampai seseorang memutuskan untuk menampilkannya.
Untuk keperluan eksperimen, feature flag merupakan mekanisme dasar pengujian sisi server. Menugaskan pengguna ke varian flag secara fungsional sama dengan menugaskan mereka ke kelompok eksperimen, dan karena keputusan terjadi di aplikasi dan bukan di browser, varian tersebut dapat memengaruhi apa pun yang dikendalikan aplikasi: logika penetapan harga, peringkat pencarian, algoritma rekomendasi, pemicu email, aturan pembayaran, dan perilaku backend yang tidak dapat dijangkau oleh alat pengujian sisi klien mana pun. Hal ini juga menghilangkan kedipan visual yang dihasilkan oleh manipulasi sisi klien, dan tidak terlihat oleh pemblokir iklan dan pengaturan browser yang memblokir skrip.
Flag memiliki beberapa tujuan berbeda yang perlu dipisahkan, karena memiliki masa pakai yang sangat berbeda. Flag rilis menyembunyikan pekerjaan yang belum selesai dan dihapus setelah fitur diluncurkan sepenuhnya. Flag eksperimen mengontrol penugasan varian dan dihapus ketika pengujian selesai. Flag operasional, terkadang disebut sakelar pemutus, memungkinkan fitur dinonaktifkan secara instan jika menyebabkan masalah di lingkungan produksi, dan dapat bertahan tanpa batas waktu. Flag izin membatasi fungsionalitas berdasarkan tingkatan pelanggan atau kontrak dan pada dasarnya bersifat permanen. Memperlakukan keempatnya sebagai hal yang sama adalah bagaimana organisasi akhirnya memiliki ratusan kondisi usang yang tidak ada yang berani menghapusnya.
Akumulasi tersebut merupakan risiko utama. Setiap flag adalah sebuah cabang, dan jumlah jalur kode yang mungkin bertambah secara multiplikatif seiring dengan akumulasi flag. Pengujian setiap kombinasi menjadi tidak mungkin, interaksi tak terduga antar flag menyebabkan cacat yang sulit direproduksi, dan kode menjadi semakin sulit dipahami. Tim yang disiplin memperlakukan penghapusan flag sebagai bagian dari definisi selesai, menyimpan inventaris dengan pemilik dan tanggal kedaluwarsa untuk setiap flag, dan secara berkala melakukan audit untuk flag yang telah berada pada nilai tetap selama berbulan-bulan.
Fitur flag juga memungkinkan strategi rilis yang mengurangi risiko secara independen dari eksperimen. Peluncuran progresif mengekspos fitur ke satu persen lalu lintas, kemudian lima persen, lalu dua puluh persen, dengan memantau tingkat kesalahan dan metrik bisnis di setiap langkah. Penerapan berbasis cincin mengekspos pengguna internal terlebih dahulu, kemudian kelompok beta, lalu semua orang. Rilis canary menjalankan versi baru bersamaan dengan versi lama dan membandingkan metrik operasional sebelum melanjutkan. Semua ini adalah variasi dari kemampuan yang sama: kemampuan untuk mengubah siapa yang melihat apa tanpa menerapkan kode.
Flag juga menyediakan mekanisme untuk peluncuran regional dan segmen yang terkontrol, yang penting bagi organisasi yang beroperasi di beberapa pasar. Perubahan dapat diekspos terlebih dahulu di satu negara, dipantau untuk masalah spesifik pasar yang melibatkan bahasa, metode pembayaran, tampilan pajak, atau persyaratan peraturan, dan kemudian diperluas setelah terbukti berhasil. Ini jauh lebih aman daripada rilis global, dan menghasilkan bukti tentang apakah peningkatan tersebut dapat diterapkan antar pasar, yang sering diasumsikan dan jarang diuji. Pertanyaan tentang perangkat lunak muncul dari skala: tim kecil dapat mengelola flag dengan file konfigurasi dan antarmuka administratif yang sederhana, sementara organisasi yang menjalankan banyak flag secara bersamaan di berbagai layanan umumnya membutuhkan platform manajemen khusus yang menyediakan aturan penargetan, log audit, dan evaluasi yang konsisten di seluruh backend dan frontend, karena evaluasi yang tidak konsisten antar lapisan menghasilkan pengguna yang hanya melihat setengah dari fitur tersebut.
Penggunaan flag seringkali menjadi prasyarat sebelum praktik eksperimen yang serius dapat dilakukan, terutama untuk fungsionalitas yang berada di lapisan aplikasi dan bukan di lapisan presentasi. pengembangan produk Dalam pekerjaan ini, infrastruktur flag biasanya dibangun bersamaan dengan pipeline pengiriman, sehingga eksperimen, peluncuran bertahap, dan pengembalian darurat semuanya menggunakan mekanisme yang sama. Setelah ada, Layanan CRO Program ini tidak lagi terbatas pada apa yang dapat diubah di browser, yang biasanya membuka ide pengujian bernilai tinggi dalam daftar tugas: ide-ide yang melibatkan penetapan harga, logika personalisasi, dan mekanisme alur pembelian itu sendiri.