Mengapa Anda Tidak Harus Merilis Aplikasi Mobile ke Semua Pengguna Sekaligus
Anda baru saja mendapatkan persetujuan dari toko aplikasi. Tim Anda sudah menunggu momen ini. Insting alaminya adalah menekan tombol "rilis ke semua pengguna" dan beralih ke fitur berikutnya. Tapi inilah yang terjadi jika Anda melakukannya: sebuah crash yang hanya muncul di perangkat Android 12 dengan RAM 4GB menimpa setiap pengguna tersebut secara bersamaan. Anda tidak akan tahu sampai dasbor pemantauan crash Anda berubah merah, dan saat itu, ratusan atau ribuan pengguna sudah mengalami pengalaman buruk.
Ini bukan skenario hipotetis. Ini terjadi secara rutin. Solusinya bukan hanya pengujian yang lebih baik. Solusinya adalah mengubah cara Anda merilis: alih-alih satu dorongan besar, rilis ke kelompok kecil terlebih dahulu, amati apa yang terjadi, lalu perluas.
Masalah dengan Merilis ke Semua Orang
Ketika Anda merilis ke semua pengguna sekaligus, Anda kehilangan jaring pengaman. Proses review toko aplikasi menangkap masalah yang jelas, tetapi tidak bisa menangkap semuanya. Crash spesifik perangkat, ketidakcocokan versi OS, masalah kondisi jaringan, dan regresi performa yang halus sering kali lolos. Masalah-masalah ini hanya muncul ketika pengguna nyata menjalankan aplikasi di perangkat nyata dalam kondisi nyata.
Risikonya bukan hanya crash. Sebuah fitur yang bekerja sempurna di staging mungkin berperilaku berbeda ketika ribuan pengguna mengaksesnya secara bersamaan. Sebuah kueri database yang cepat dengan data uji mungkin melambat drastis dengan volume data produksi. Sebuah panggilan API yang berfungsi baik selama pengembangan mungkin gagal di bawah latensi jaringan nyata.
Merilis ke semua orang berarti Anda menemukan masalah ini dengan cara yang sulit: semua sekaligus, tanpa kesempatan untuk menghentikan kerusakan.
Staged Rollout dan Phased Release
Di sinilah staged rollout dan phased release berperan. Keduanya adalah mekanisme untuk merilis versi baru ke subset pengguna terlebih dahulu, memantau dampaknya, lalu secara bertahap memperluas ke sisanya. Android menyebutnya staged rollout. iOS menyebutnya phased release. Konsepnya sama, tetapi implementasinya berbeda.
Ide intinya sederhana: kurangi radius ledakan. Jika ada yang salah, hanya sebagian kecil pengguna yang terpengaruh. Anda punya waktu untuk mendeteksi masalah, menarik rilis, dan memperbaikinya sebelum kerusakan menyebar.
Diagram alir berikut mengilustrasikan proses staged rollout tipikal dengan titik pemeriksaan pemantauan dan keputusan rollback:
Cara Kerja Staged Rollout di Android
Di Google Play Console, staged rollout memungkinkan Anda memilih persentase pengguna yang menerima pembaruan. Anda bisa memulai dengan 10 persen. Pipeline CI/CD Anda dapat mengotomatiskan ini dengan mengirim versi baru ke track tertentu melalui Google Play Console API.
Berikut adalah gambaran staged rollout tipikal dalam praktik:
- Pipeline membangun versi rilis dan menjalankan pengujian otomatis.
- Pipeline mengunggah build ke track staged rollout sebesar 10 persen.
- Pipeline menunggu 48 jam sambil memantau crash rate dan laporan error.
- Jika semuanya terlihat normal, pipeline memperluas ke 25 persen.
- Setelah periode pemantauan lain, perluas ke 50 persen.
- Terakhir, perluas ke 100 persen.
Jika sewaktu-waktu crash rate melonjak atau laporan error meningkat signifikan, pipeline dapat menghentikan rollout dan memberi tahu tim. Anda juga dapat menghentikan rollout secara manual dari Play Console jika melihat masalah sebelum pemeriksaan otomatis menangkapnya.
Keuntungan utama di Android adalah kendali. Anda menentukan persentase dan waktu. Anda bisa bergerak cepat ketika semuanya terlihat baik, dan Anda bisa menjeda atau berhenti ketika tidak.
Cara Kerja Phased Release di iOS
Apple mengambil pendekatan berbeda. Dengan phased release, Apple yang mengontrol jadwal. Anda mengaktifkan opsi ini di App Store Connect saat mengirimkan versi baru. Setelah disetujui, Apple merilis pembaruan ke sebagian kecil pengguna pada hari pertama, lalu secara bertahap memperluas selama tujuh hari.
Anda tidak bisa mengatur persentase secara manual seperti di Android. Anda tidak bisa mempercepat rollout jika semuanya terlihat bersih. Tapi Anda tetap bisa memantau dampaknya melalui analitik App Store Connect atau alat pihak ketiga seperti Firebase Crashlytics.
Jika Anda mendeteksi masalah selama phased release, Anda bisa menarik versi tersebut dari App Store Connect sebelum semua pengguna menerimanya. Ini adalah jaring pengaman yang kritis. Meskipun Anda memiliki kendali lebih sedikit atas kecepatan rollout, Anda tetap memiliki kemampuan untuk menghentikan kerusakan.
Jendela tujuh hari mungkin terasa lambat, terutama ketika Anda bersemangat untuk merilis fitur. Tapi pertimbangkan alternatifnya: merilis ke semua orang dan menemukan bug kritis setelah 100.000 pengguna sudah mengunduh pembaruan.
Mengotomatiskan Staged Rollout di Pipeline Anda
Pipeline CI/CD Anda dapat menangani seluruh proses staged rollout secara otomatis. Berikut adalah pendekatan praktis untuk Android:
- Bangun dan tanda tangani APK atau AAB rilis.
- Unggah ke Google Play Console menggunakan API, targetkan track staged rollout.
- Atur persentase awal ke 10 persen.
- Tunggu selama periode pemantauan yang ditentukan, biasanya 24 hingga 48 jam.
- Periksa metrik dari Firebase Crashlytics atau alat pelaporan crash Anda.
- Putuskan: jika crash rate di bawah ambang batas, perluas ke persentase berikutnya. Jika di atas, hentikan dan beri tahu.
- Ulangi hingga mencapai 100 persen.
Untuk iOS, otomatisasinya lebih sederhana karena Anda tidak bisa mengontrol persentase. Pipeline Anda dapat:
Berikut adalah cuplikan YAML untuk job GitHub Actions yang mengunggah build Android dan mengatur staged rollout 10%:
- name: Upload to Google Play (10% staged rollout)
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.example.app
releaseFiles: app/build/outputs/bundle/release/app-release.aab
track: production
userFraction: 0.1
releaseStatus: completed
Langkah ini menggunakan parameter userFraction untuk membatasi rollout ke 10% pengguna. Pipeline nantinya dapat memperluas fraksi ini setelah pemantauan.
- Bangun dan tanda tangani IPA.
- Unggah ke App Store Connect.
- Aktifkan phased release dalam pengiriman.
- Pantau crash rate dan analitik selama jendela tujuh hari.
- Tarik rilis jika masalah muncul.
Pipeline tidak menggantikan penilaian manusia. Pipeline menangani bagian mekanis: mengunggah, menunggu, memeriksa metrik, dan memperluas. Tim tetap perlu meninjau laporan crash, menyelidiki anomali, dan membuat keputusan akhir apakah akan melanjutkan atau menghentikan.
Apa yang Bukan Staged Rollout
Staged rollout bukan pengganti pengujian yang tepat. Anda tetap membutuhkan unit test, integration test, dan QA manual sebelum mengirimkan ke toko aplikasi. Staged rollout adalah garis pertahanan terakhir, bukan yang pertama.
Staged rollout juga bukan cara untuk mengirimkan kode yang rusak dan berharap yang terbaik. Tujuannya adalah menangkap masalah yang lolos meskipun upaya pengujian terbaik Anda. Jika Anda mengandalkan staged rollout untuk menangkap bug dasar, proses pengujian Anda perlu ditingkatkan.
Daftar Periksa Praktis untuk Rilis Berikutnya
- Siapkan pemantauan crash dengan pemberitahuan sebelum rilis.
- Tentukan ambang batas crash rate untuk menghentikan rollout.
- Konfigurasikan pipeline untuk mengunggah ke track staged rollout.
- Atur persentase awal ke 10 persen atau lebih rendah.
- Tentukan periode pemantauan antara perluasan.
- Uji mekanisme penghentian: dapatkah Anda menghentikan rollout dengan cepat?
- Tugaskan seseorang untuk memantau laporan crash selama jendela rollout.
- Dokumentasikan prosedur rollback jika Anda perlu menarik rilis.
Kesimpulan
Merilis aplikasi mobile ke semua pengguna sekaligus adalah perjudian yang tidak perlu Anda ambil. Staged rollout dan phased release memberi Anda jalur yang terkendali dan dapat diamati dari nol hingga deployment penuh. Anda menukar beberapa hari ekstra waktu rilis dengan kemampuan untuk menangkap masalah sebelum memengaruhi semua orang. Pertukaran itu hampir selalu sepadan.
Lain kali aplikasi Anda disetujui, tahan keinginan untuk merilis ke semua orang. Mulailah dari yang kecil, amati metriknya, dan perluas hanya ketika Anda yakin. Pengguna Anda tidak akan pernah tahu Anda menahan, tetapi mereka akan menyadari ketika aplikasi tidak crash pada hari peluncuran.