Bagaimana sebaiknya menangani emergency di production


12 Januari 2020

Photo by Dawn Armfield on Unsplash

People make mistakes. But from mistakes, we learn and grow.

Kita sudah berusaha sangat keras untuk menyelesaikan task, tetapi kadang-kadang masih ada beberapa hal yang kelewat selama development dan menyebabkan dampak besar di production.

Dan hal seperti itu memang tidak dapat dihindari. Yang bisa kita lakukan hanyalah harus menghadapinya dan bertanggung jawab.

Saya ingat beberapa bulan setelah masuk Bukalapak pernah bikin bug yang menyebabkan dampak cukup besar. Pada saat itu saya bikin fitur transaksi rutin di halaman tagihan listrik pascabayar. Pull request sudah di tes di local ataupun staging, dan aman-aman saja. Ketika rollout ke production pun fitur tersebut berjalan sangat baik.

Akan tetapi bug muncul dari pembayaran token listrik yang memang berada di halaman yang sama dengan pembayaran tagihan listrik.

Hal itu terjadi karena ketika development, saya tidak sadar kalau modul dan kode untuk halaman pembayaran tagihan listrik pascabayar itu jadi satu dengan halaman pembayaran token listrik. Saya hanya tes fitur tagihan listrik pascabayar dan mengabaikan fitur token listrik.

Dampaknya, di hari itu pelanggan Bukalapak tidak dapat melakukan pembayaran token listrik di platform desktop web.

Dari peristiwa tersebut saya belajar beberapa panduan sederhana ketika terjadi emergency.

Be relax

Photo by Vicky Gu on Unsplash
Photo by Vicky Gu on Unsplash

Hal pertama yang perlu dilakukan adalah santai dan tidak tergesa-gesa.

Kita mungkin berpikir bahwa kita harus bertindak sesegera mungkin untuk menyelesaikan insiden. Tetapi jika kita terburu-buru, justru dapat memperburuk keadaan. Jauh lebih bijaksana untuk menghindar dari membuat lebih banyak kesalahan dengan merencanakan langkah yang lebih hati-hati. Coba untuk tarik nafas, atau mungkin sruput kopi yang ada di depan kita, baru kemudian bekerja dengan tenang.

Koordinasi dengan squad atau tim

Photo by Alex Kotliarskyi on Unsplash
Photo by Alex Kotliarskyi on Unsplash

Sometimes your emergency is not really an emergency.

Product manager (atau mungkin project manager) kita kemungkinan besar sudah mengetahui situasinya, dan seharusnya mereka sedang menghitung dampak dari situasi emergency tersebut. Tetapi jika PM kita belum tahu, maka kita harus segera memberitahukan situasinya.

Kita dapat langsung mengeksekusi solusi yang sudah kita koding secara langsung. jika solusinya cuman butuh sedikit perubahan baris kode dan cepat. Tetapi jika kita belum tahu bagaimana cara menyelesaikannya, dan mungkin butuh perbaikan yang cukup besar, sebaiknya kita menunggu arahan dari PM kita.

Jika bug yang kita buat tersebut bukan termasuk ke dalam situasi emergency, Kita bisa ambil waktu yang cukup lama untuk menentukan solusi yang lebih baik untuk jangka panjang. Tetapi jika bug tersebut termasuk emergency dan butuh deployment sesegera mungkin, koordinasikan dengan lead yang ada di tim kita.

Kalau di Bukalapak, kami memiliki production issue levels & SLAs. Parameter yang digunakan adalah daily GMV impact dan daily revenue impact.

Test our code intensively

Meskipun kita berada di situasi emergency, kita selalu punya waktu untuk melakukan testing. Tes perubahan kode yang kita buat berkali-kali. Lakukan tes di semua environment, baik itu local, staging, atau bahkan preproduction. Atau jika diperlukan, kita bisa melakukan tes di production beta.

Jangan ragu untuk meminta bantuan rekan QA atau test engineer di tim kita. Mereka pasti sangat senang membantu.

Sangat direkomendasikan untuk menambahkan unit test di setiap perubahan kode kita. Intinya, lakukan tes berkali-kali hingga kita cukup percaya diri untuk melakukan deployment.

Jangan ragu bertanya kepada yang lebih senior

Jika tim atau squad kita tidak dapat membantu mencari solusi, kita selalu bisa untuk bertanya dan meminta bantuan ke tim lain (atau tim core jika ada) yang menurut kita bisa memberikan solusi.

Pastikan kode yang sudah kita deploy berjalan dengan baik

Kita pasti sudah sangat percaya diri dengan solusi yang sudah kita pakai. Tapi, selalu cek kembali setelah deployment apakah kode yang kita tulis benar-benar berjalan dengan baik di production. Jika diperlukan, kita dapat minta tolong ke lead kita untuk memantau production metrics apakah sudah aman atau belum.

Learn and share our experience

Photo by Mimi Thian on Unsplash
Photo by Mimi Thian on Unsplash

Mendapatkan pelajaran dari situasi emergency adalah satu hal. Tetapi berbagi mengenai pengalaman yang di dapat dari emergency tersebut adalah hal lain.

Tidak perlu malu untuk sharing mengenai pengalaman emergency yang menimpa kita, karena hal itu termasuk dari proses pembelajaran. Tidak harus formal, minimal kita bisa berbagi via group chat, atau ketika meeting, atau bahkan melalui dokumentasi yang kita buat.

Dengan berbagi, kita sudah membantu engineer lain untuk tidak jatuh di lubang yang sama. Kesalahan yang kita buat bisa menjadi sumber pembelajaran yang sangat berharga bagi rekan kita.

emergency deployment software engineering testing solving