Eksperimen progresif dengan bendera fitur

Saat tim DevOps beralih ke metodologi Agile yang berfokus pada pengiriman fitur berkelanjutan, kebutuhan untuk mengontrol bagaimana mereka tersedia bagi pengguna menjadi semakin penting. Bendera fitur adalah solusi yang bagus untuk membatasi akses pengguna ke fitur baru, baik untuk tujuan pemasaran atau untuk pengujian dalam produksi.

Memisahkan penyebaran dan paparan

Dengan bendera fitur, tim dapat memilih apakah serangkaian fitur tertentu terlihat dalam pengalaman pengguna dan/atau dipanggil dalam fungsionalitas. Fitur baru dapat dibangun dan disebarkan sebagai bagian dari proses pengembangan biasa tanpa memiliki fitur tersebut yang tersedia untuk akses luas. Penyebaran fitur dipisahkan dengan mudah dari paparannya.

Bendera memberikan kontrol runtime ke pengguna individu

Bendera juga memberikan kontrol terperinci sampai ke masing-masing pengguna. Ketika saatnya untuk mengaktifkan fitur, baik untuk satu pengguna, grup kecil, atau semua orang, tim cukup mengubah bendera fitur untuk menyalakannya tanpa harus menyebarkan ulang.

Cakupan bendera fitur akan bervariasi berdasarkan sifat fitur dan audiens. Dalam beberapa kasus, bendera fitur akan secara otomatis mengaktifkan fungsionalitas untuk semua orang. Dalam kasus lain, fitur akan diaktifkan berdasarkan pengguna demi pengguna. Teams juga dapat menggunakan bendera fitur untuk memungkinkan pengguna ikut serta mengaktifkan fitur, jika mereka menginginkannya. Benar-benar tidak ada batasan cara bendera fitur diterapkan.

Mendukung umpan balik dan eksperimen awal

Bendera fitur merupakan cara yang bagus untuk mendukung eksperimen awal. Beberapa fitur dapat memiliki tepi kasar sejak dini, yang mungkin hanya menarik bagi pengadopsi paling awal. Mencoba mendorong fitur-fitur yang tidak cukup siap ke audiens yang lebih luas dapat menghasilkan ketidakpuasan. Tetapi manfaat mengumpulkan umpan balik dari pengguna yang bersedia untuk menangani fitur yang sedang berlangsung sangat berharga.

Mematikan cepat sakelar

Terkadang sangat membantu untuk dapat mematikan sesuatu. Misalnya, fitur baru tidak berfungsi seperti yang dimaksudkan, dan ada efek samping yang menyebabkan masalah di tempat lain. Anda dapat menggunakan bendera fitur untuk menonaktifkan fungsionalitas baru dengan cepat untuk kembali ke perilaku tepercaya tanpa harus menyebarkan ulang. Meskipun bendera fitur sering dipikirkan dalam hal fitur antarmuka pengguna, bendera fitur juga dapat dengan mudah digunakan untuk perubahan arsitektur atau infrastruktur.

Tahapan standar

Microsoft menggunakan proses peluncuran standar untuk mengaktifkan bendera fitur. Ada dua konsep terpisah: ring untuk penyebaran, dan tahapan untuk bendera fitur. Pelajari selengkapnya tentang ring dan tahapan.

Tahapannya adalah tentang pengungkapan atau paparan. Misalnya, tahap pertama bisa untuk akun tim dan akun pribadi anggota. Sebagian besar pengguna tidak akan melihat sesuatu yang baru karena satu-satunya tempat bendera diaktifkan adalah untuk tahap pertama ini. Ini memungkinkan tim untuk sepenuhnya menggunakan dan bereksperimen dengannya. Setelah tim keluar, pilih pelanggan yang akan dapat memilihnya melalui tahap kedua bendera fitur.

Ikut serta

Ini adalah praktik yang baik untuk memungkinkan pengguna ikut serta dalam bendera fitur jika memungkinkan. Misalnya, tim dapat mengekspos panel pratinjau yang berkaitan dengan preferensi atau pengaturan pengguna.

Screenshot of opt-in preview pane.

Menggunakan bendera dengan telemetri

Bendera fitur menyediakan cara untuk mengekspos pembaruan secara bertahap. Namun, tim harus terus memantau metrik yang tepat untuk mengukur kesiapan untuk paparan yang lebih luas. Metrik ini harus mencakup perilaku penggunaan, serta dampak pembaruan pada kesehatan sistem. Penting untuk menghindari perangkap dengan menganggap semuanya baik-baik saja hanya karena sepertinya tidak ada hal buruk yang terjadi.

Contoh bendera fitur

Pertimbangkan contoh berikut. Tim menambahkan beberapa tombol di sini untuk Memilih secara sembarangan dan Kembali ke antarmuka pengguna permintaan pull. Ini disebarkan menggunakan bendera fitur.

Screenshot of pull request UI example.

Menentukan bendera fitur

Fitur pertama yang diekspos adalah tombol Kembali. Solusi ini menggunakan file XML untuk menentukan semua bendera fitur. Ada satu file per layanan dalam hal ini, yang membuat insentif untuk menghapus bendera lama untuk mencegah bagian menjadi sangat panjang. Tim akan menghapus bendera lama karena ada motivasi alami untuk mengontrol ukuran file tersebut.

<?xml version="1.0" encoding="utf-8"?>
<!--
  In this group we should register Azure DevOps specific features and sets their states.
-->
<ServicingStepGroup name="AzureDevOpsFeatureAvailability" … >
  <Steps>
    <!-- Feature Availability -->
    <ServicingStep name="Register features" stepPerformer="FeatureAvailability" … >
      <StepData>
        <!--specifying owner to allow implicit removal of features -->
        <Features owner="AzureDevOps">
           <!-- Begin TFVC/Git -->
           <Feature name="SourceControl.Revert" description="Source control revert features" />

Kerangka kerja server umum mendorong penggunaan kembali dan ekonomi skala di seluruh tim. Idealnya, proyek akan memiliki infrastruktur sehingga pengembang cukup menentukan bendera di penyimpanan pusat dan memiliki infrastruktur lainnya yang ditangani untuk mereka.

Memeriksa bendera fitur saat runtime

Bendera fitur yang digunakan di sini bernama SourceControl.Revert. Berikut adalah TypeScript aktual dari halaman tersebut yang mengilustrasikan panggilan untuk pemeriksaan ketersediaan fitur.

private addRevertButton(): void {
 if (FeatureAvailability.isFeatureEnabled(Flags.SourceControlRevert)) {
     this._calloutButtons.unshift(
         <button onClick={ () => Dialogs.revertPullRequest(
             this.props.repositoryContext,
             this.props.pullRequest.pullRequestContract(),
             this.props.pullRequest.branchStatusContract().sourceBranchStatus,
             this.props.pullRequest.branchStatusContract().targetBranchStatus)
         }
         >
             {VCResources.PullRequest_Revert_Button}
         </button>
        );
     }
}

Contoh di atas menggambarkan penggunaan dalam TypeScript, tetapi dapat dengan mudah diakses menggunakan C#. Kode memeriksa untuk melihat apakah fitur diaktifkan dan, jika demikian, merender tombol untuk menyediakan fungsionalitas. Jika bendera tidak diaktifkan, maka tombol akan dilewati.

Mengontrol bendera fitur

Platform bendera fitur yang bagus akan menyediakan beberapa cara untuk mengelola apakah bendera tertentu diatur. Biasanya, ada skenario penggunaan untuk bendera yang akan dikontrol melalui PowerShell dan antarmuka web. Untuk PowerShell, semua yang benar-benar perlu diekspos adalah cara untuk mendapatkan dan mengatur status bendera fitur, bersama dengan parameter opsional untuk hal-hal seperti pengidentifikasi akun pengguna tertentu, jika berlaku.

Mengontrol bendera fitur melalui antarmuka pengguna web

Contoh berikut menggunakan UI web yang diekspos untuk produk ini oleh tim. Perhatikan bendera fitur untuk SourceControl.Revert. Ada dua akun pribadi yang tercantum di sini: hallux dan buckh-westeur. Status ini ditetapkan untuk hallux, yang kebetulan berada di Utara Tengah, dan dihapus untuk akun lain di Eropa Barat.

Screenshot of controlling feature flags through web UI.

Sifat bendera fitur akan mendorong cara fitur diekspos. Dalam beberapa kasus, paparan akan mengikuti model ring dan tahapan. Dalam kasus lain, pengguna dapat memilih ikut serta melalui antarmuka pengguna konfigurasi, atau bahkan dengan mengirim email kepada tim untuk akses.

Pertimbangan untuk bendera fitur

Sebagian besar bendera fitur dapat dihentikan setelah fitur diluncurkan untuk semua orang. Pada saat itu, tim dapat menghapus semua referensi ke bendera dalam kode dan konfigurasi. Ini adalah praktik yang baik untuk menyertakan tinjauan bendera fitur, seperti di awal setiap sprint.

Pada saat yang sama, mungkin ada sekumpulan bendera fitur yang bertahan karena berbagai alasan. Misalnya, tim mungkin ingin menyimpan bendera fitur yang mencabangkan sesuatu yang tidak struktural selama jangka waktu tertentu setelah layanan produksi beralih sepenuhnya. Namun, perlu diingat bahwa codepath potensial ini dapat diaktifkan kembali di masa mendatang selama penghapusan bendera fitur secara eksplisit, sehingga perlu diuji dan dipertahankan sampai opsi dihapus.

Bendera fitur dan strategi percabangan

Bendera fitur memungkinkan tim pengembangan untuk menyertakan fitur yang tidak lengkap dalam main tanpa memengaruhi orang lain. Selama codepath diisolasi di belakang bendera fitur, biasanya aman untuk membuat dan menerbitkan kode tersebut tanpa efek samping yang memengaruhi penggunaan normal. Tetapi jika ada kasus di mana fitur memerlukan dependensi, seperti saat mengekspos titik akhir REST, tim harus mempertimbangkan bagaimana dependensi tersebut dapat membuat pekerjaan keamanan atau pemeliharaan bahkan tanpa fitur terekspos.

Bendera fitur untuk mengurangi risiko

Terkadang fitur baru berpotensi memperkenalkan perubahan yang merusak atau mengganggu. Misalnya, produk mungkin mengalami transformasi dari skema database yang luas hingga yang panjang. Dalam skenario tersebut, pengembang harus membuat cabang fitur dalam waktu singkat. Mereka lalu membuat perubahan yang tidak stabil pada cabang dan menyimpan fitur di belakang bendera. Praktik populer adalah agar tim kemudian menggabungkan perubahan ke main segera setelah mereka tidak menyebabkan bahaya. Ini tidak akan layak tanpa kemampuan untuk menyimpan fitur yang belum selesai tersembunyi di balik bendera fitur.

Bendera fitur membantu bekerja di utama

Jika Anda mengikuti praktik akal sehat yang dibahas dalam fase Kembangkan , bekerja main adalah cara yang baik untuk mengencangkan siklus DevOps. Ketika dikombinasikan dengan bendera fitur, pengembang dapat dengan cepat menggabungkan fitur upstram dan mendorongnya melalui gauntlet pengujian. Kode kualitas dapat dengan cepat diterbitkan untuk pengujian dalam produksi. Setelah beberapa sprint, pengembang akan mengenali manfaat bendera fitur dan menggunakannya secara proaktif.

Cara memutuskan apakah akan menggunakan bendera fitur

Tim fitur memiliki keputusan apakah mereka memerlukan bendera fitur atau tidak untuk perubahan tertentu. Tidak setiap perubahan memerlukannya, jadi ini adalah panggilan penilaian untuk pengembang saat mereka memilih membuat perubahan tertentu. Dalam kasus fitur Kembalikan yang dibahas sebelumnya, penting untuk menggunakan bendera fitur untuk mengontrol paparan. Memungkinkan tim untuk memiliki keputusan utama tentang area fitur mereka adalah bagian dari mengaktifkan otonomi dalam organisasi DevOps yang efektif.

Buat vs beli

Meskipun dimungkinkan untuk membangun infrastruktur bendera fitur Anda sendiri, mengadopsi platform seperti LaunchDarkly atau Split umumnya direkomendasikan. Lebih baik berinvestasi dalam membuat fitur daripada membuat kembali fungsionalitas bendera fitur.

Langkah berikutnya

Pelajari selengkapnya tentang menggunakan bendera fitur di aplikasi ASP.NET Core.