Mengapa Anda Perlu Rencana Pemulihan Sebelum Deployment Berikutnya
Anda baru saja mendorong versi baru aplikasi ke production. Dalam hitungan menit, pengguna mulai melaporkan bahwa mereka tidak bisa login. Tingkat error melonjak. Waktu respons database meningkat tiga kali lipat. Chat tim Anda meledak dengan pesan. Seseorang bertanya: "Haruskah kita rollback?" Orang lain berkata: "Biarkan saya coba perbaiki langsung di server." Orang ketiga diam karena mereka sudah menjalankan perintah yang belum pernah mereka uji sebelumnya.
Adegan ini terjadi di tim dari berbagai ukuran. Kesamaan yang ada bukanlah bug itu sendiri. Melainkan ketiadaan rencana. Ketika sesuatu salah saat deployment, tim tidak punya waktu untuk berpikir jernih. Mereka harus bertindak di bawah tekanan, dengan informasi yang tidak lengkap, sementara pengguna menunggu dan manajer bertanya tentang perkembangan. Pada saat itu, perbedaan antara pemulihan cepat dan downtime berkepanjangan sering kali hanya bergantung pada satu hal: apakah tim sudah memutuskan apa yang harus dilakukan sebelum deployment dimulai.
Masalah dengan Memutuskan Saat Insiden Terjadi
Ketika deployment gagal, naluri alami adalah mencari tahu apa yang harus dilakukan saat itu juga. Seseorang menyarankan untuk rollback ke versi sebelumnya. Orang lain ingin menambal masalah langsung di server production. Orang lain lagi berargumen bahwa tim harus menunggu dan melihat apakah masalahnya stabil. Diskusi-diskusi ini membuang waktu berharga. Setiap menit perdebatan berarti lebih banyak pengguna yang terdampak, lebih banyak error yang tercatat, dan lebih banyak tekanan pada tim.
Risiko yang lebih besar adalah seseorang mengambil tindakan yang tidak direncanakan dan justru memperburuk keadaan. Mengedit file secara manual di server production, mengembalikan backup parsial, atau menjalankan perintah database tanpa pengujian dapat menimbulkan masalah baru. Apa yang awalnya hanya halaman login yang rusak bisa berubah menjadi inkonsistensi data, database yang korup, atau pemadaman layanan total.
Tim yang belum menyiapkan rencana pemulihan pada dasarnya sedang berjudi. Mereka berharap deployment berjalan lancar, dan jika tidak, mereka berharap seseorang di ruangan tahu apa yang harus dilakukan. Itu bukan strategi. Itu hanya angan-angan.
Apa Sebenarnya Rencana Pemulihan Itu
Rencana pemulihan bukanlah dokumen tebal yang tersimpan di drive bersama dan dibaca setahun sekali. Ini adalah kumpulan keputusan yang dibuat sebelum deployment, ditulis dalam bentuk yang bisa dijalankan tim di bawah tekanan. Rencana tersebut menjawab pertanyaan spesifik:
- Dalam kondisi apa kita menghentikan deployment dan memulai pemulihan?
- Siapa yang memiliki wewenang untuk mengambil keputusan itu?
- Apakah kita rollback ke versi sebelumnya, atau roll forward dengan perbaikan?
- Apa langkah-langkah tepat untuk menjalankan tindakan pemulihan yang dipilih?
- Bagaimana cara memverifikasi bahwa pemulihan berhasil?
Untuk tim kecil, rencana mungkin berupa daftar periksa dengan lima langkah. Untuk tim yang lebih besar dengan banyak layanan dan dependensi, rencana mungkin mencakup titik koordinasi, saluran komunikasi, dan jalur eskalasi. Kompleksitasnya menyesuaikan dengan sistem, tetapi prinsipnya tetap sama: putuskan sebelum Anda melakukan deployment.
Mengapa Persiapan Itu Penting
Ada empat alasan mengapa rencana pemulihan harus ada sebelum deployment, bukan setelah masalah muncul.
Pertama, waktu tidak berpihak pada Anda saat insiden terjadi. Setiap menit downtime ada biayanya: pendapatan hilang, pengguna frustrasi, reputasi rusak. Jika tim harus berhenti dan berpikir tentang apa yang harus dilakukan, waktu pemulihan bertambah. Rencana yang sudah ditentukan sebelumnya menghilangkan langkah berpikir. Tim menjalankan tindakan yang sudah diketahui, bukan menciptakan yang baru.
Kedua, tanpa rencana, orang yang berbeda akan memiliki pendapat berbeda tentang apa yang harus dilakukan. Satu engineer mungkin ingin segera rollback. Engineer lain mungkin ingin menyelidiki terlebih dahulu. Yang ketiga mungkin ingin menerapkan hotfix. Perbedaan pendapat ini menimbulkan penundaan dan kebingungan. Rencana pemulihan menyelesaikan pertanyaan-pertanyaan ini di muka. Semua orang tahu tindakan default apa yang harus diambil dan siapa yang memutuskan jika tim harus menyimpang darinya.
Ketiga, beberapa tindakan pemulihan memerlukan persiapan yang tidak bisa dilakukan saat itu juga. Mengembalikan database ke keadaan sebelumnya memerlukan backup yang diambil dengan format dan kebijakan retensi yang tepat. Rollback aplikasi mobile memerlukan versi sebelumnya yang sudah ditandatangani dan siap didistribusikan. Persiapan ini harus dilakukan sebelum deployment, bukan setelah kegagalan.
Keempat, rencana yang belum pernah diuji hanyalah teori. Tim harus mensimulasikan skenario kegagalan dan menjalankan langkah-langkah pemulihan di lingkungan yang aman. Ini mengungkap celah dalam rencana, izin yang hilang, skrip yang usang, atau asumsi yang tidak berlaku dalam praktik. Menguji rencana mengubahnya dari dokumen menjadi kemampuan.
Pemulihan Bukan Tanda Pesimisme
Beberapa tim enggan membuat rencana pemulihan karena mereka merasa itu menandakan kurangnya kepercayaan pada proses deployment mereka. Itu cara berpikir yang salah. Rencana pemulihan bukanlah pengakuan bahwa Anda mengharapkan kegagalan. Ini adalah pengakuan bahwa sistem yang kompleks memiliki perilaku yang tidak dapat diprediksi, dan bersiap adalah hal yang bertanggung jawab untuk dilakukan.
Tim yang matang tidak hanya fokus membuat deployment berhasil. Mereka juga bersiap untuk kemungkinan bahwa deployment tidak berjalan sesuai harapan. Mereka memperlakukan pemulihan sebagai bagian normal dari proses pengiriman, bukan sebagai prosedur darurat yang hanya diaktifkan ketika keadaan memburuk.
Dua Pendekatan Utama: Rollback dan Roll-Forward
Setelah Anda menerima bahwa rencana pemulihan itu perlu, pertanyaan berikutnya adalah jenis pemulihan apa yang akan digunakan. Dua pendekatan yang paling umum adalah rollback dan roll-forward.
Rollback berarti mengembalikan sistem ke kondisi baik yang diketahui sebelumnya. Anda membatalkan deployment dan kembali ke versi yang berjalan sebelumnya. Ini adalah pendekatan paling langsung ketika masalahnya jelas dan versi sebelumnya stabil.
Roll-forward berarti melakukan deployment versi baru yang memperbaiki masalah, daripada kembali ke versi lama. Pendekatan ini berguna ketika versi sebelumnya memiliki masalah sendiri, ketika rollback akan menyebabkan kehilangan data, atau ketika perbaikannya cukup kecil untuk di-deploy dengan cepat.
Setiap pendekatan memiliki trade-off. Rollback lebih sederhana tetapi mungkin tidak memungkinkan untuk semua jenis perubahan. Roll-forward menjaga sistem tetap bergerak maju tetapi memerlukan perbaikan yang dikembangkan dan diuji di bawah tekanan. Pilihan yang tepat tergantung pada situasi, dan itulah mengapa keputusan harus didiskusikan dan didokumentasikan sebelum deployment.
Diagram alur berikut merangkum proses pengambilan keputusan dan langkah-langkah untuk setiap jalur pemulihan:
Daftar Periksa Praktis untuk Deployment Berikutnya
Sebelum Anda melakukan deployment, jalankan daftar periksa ini bersama tim Anda:
- Sudahkah kami menyepakati kondisi yang akan memicu pemulihan?
- Tahukah kami siapa yang memutuskan apakah akan rollback atau roll-forward?
- Apakah langkah-langkah tepat untuk pemulihan sudah didokumentasikan dan dapat diakses?
- Sudahkah kami menguji langkah-langkah pemulihan di lingkungan staging?
- Apakah kami memiliki backup, artefak, dan izin yang diperlukan?
- Apakah semua orang di tim tahu di mana menemukan rencana tersebut?
Jika Anda tidak bisa menjawab ya untuk semua pertanyaan ini, deployment Anda belum siap.
Kesimpulan
Deployment tanpa rencana pemulihan bukanlah deployment. Itu adalah harapan. Perbedaan antara tim yang pulih dalam hitungan menit dan tim yang menghabiskan berjam-jam dalam kekacauan bukanlah keterampilan teknis. Itu adalah persiapan. Putuskan apa yang akan Anda lakukan sebelum sesuatu salah, tuliskan, uji, dan pastikan semua orang tahu rencananya. Itulah cara Anda mengubah pemulihan dari kepanikan menjadi prosedur.