Sebuah fitur disetujui di staging, dirilis, lalu gagal dalam satu jam. Tidak ada yang salah melakukan sesuatu. Kedua lingkungannya memang tidak sama, dan perbedaannya tidak terlihat sampai akhirnya terlihat.
Perbedaan yang benar-benar menggigit
Data yang pertama. Staging biasanya berisi contoh yang rapi: empat puluh produk, enam pesanan, tidak ada pelanggan dengan tanda kutip di namanya dan tidak ada pesanan dengan lima puluh baris barang. Produksi menyimpan kekacauan bertahun-tahun, termasuk catatan yang diimpor sebelum aturan yang sekarang ada.
Yang kedua waktu. Staging dipakai pada jam kantor oleh dua orang. Tidak ada yang berjalan jam tiga pagi, tidak ada yang bertumpuk, tidak ada yang menunggu di belakang yang lain. Apa pun yang bergantung pada urutan — pekerjaan terjadwal, antrean, kunci — secara definisi belum teruji.
Yang ketiga skala, dan jarang soal server. Ia biasanya sebuah kueri yang mengembalikan seluruh isi tabel: seketika untuk enam pesanan, lambat untuk enam puluh ribu.
Buat berbedanya disengaja, bukan kebetulan
Tujuannya bukan dua lingkungan yang identik; itu mahal dan, dengan data pelanggan sungguhan, sering tidak bijak. Tujuannya adalah setiap perbedaan merupakan keputusan yang dibuat seseorang dan bisa disebutkan namanya.
Versi yang sama untuk semua yang berjalan. Konfigurasi yang sama, hanya nilainya yang berbeda. Pekerjaan terjadwal yang sama, pada jam yang sama. Salinan data produksi dengan bagian pribadinya diacak — bukan data karangan, karena data karangan tidak pernah memuat bentuk-bentuk yang menyebabkan kegagalan.
Kalau sebuah perbedaan memang harus ada, ia harus berisik. Spanduk lingkungan di bagian atas staging bukan hiasan; itulah yang mencegah seseorang mengirim email ke pelanggan sungguhan dari basis data yang salah.
Kilometer terakhir adalah rilisnya sendiri
Sebagian besar kegagalan “di staging jalan” bukan soal fiturnya sama sekali. Ia adalah migrasi yang berjalan di tabel dengan volume nyata, cache yang tidak dibersihkan, worker antrean yang masih menjalankan kode minggu lalu, aset yang dibangun di tempat lain.
Karena itu rilis harus berupa skrip, dijalankan identik setiap kali, dan karena itu staging harus dirilis dengan cara yang sama seperti produksi. Kalau staging diperbarui manual dan produksi lewat skrip, dua hal terpenting dalam sistem itu belum pernah diuji bersama.