Teman saya, Priya, mengurus penjadwalan untuk sebuah bangsal medis berkapasitas 34 tempat tidur dan sudah dua tahun menangani permintaan tukar shift lewat grup teks yang tidak dibaca siapa pun secara berurutan. Ia ingin sesuatu yang bisa dibuka perawat di ponsel saat istirahat, memposting shift yang perlu ditutupi, dan ada yang mengambilnya sebelum kepala perawat harus menyusun ulang jadwal secara manual. Saya membangunnya selama tiga minggu malam hari. Ini adalah catatan hari saat aplikasinya benar-benar dirilis — publikasi, domain khusus, perawat sungguhan, shift sungguhan — karena celah antara "berfungsi saat pengujian" dan "berfungsi jam 7 pagi ketika bangsal kekurangan dua orang" ternyata menjadi pelajaran tersendiri.
06:58 — publikasi
Saya sudah mengatur target deploy ke domain milik Priya sendiri sejak malam sebelumnya, jadi bagian ini agak antiklimaks: tekan publikasikan, lihat catatan verifikasi build menjalankan pemeriksaannya:
- Rute berhasil diselesaikan
- Endpoint klaim shift mengembalikan respons nyata, bukan stub
- Hook notifikasi SMS benar-benar dikonfigurasi, bukan mode dry-run
Semua hijau. Saya mengirim tautan itu ke Priya pukul 06:58 karena tahu ia akan mulai shift saat itu juga, dan saya ingin ia melihatnya sudah aktif sebelum harinya dimulai, bukan setelahnya.
07:15 — pengguna nyata pertama melakukan sesuatu yang belum saya uji
Priya memposting shift terbuka untuk malam itu dalam dua puluh menit, lebih cepat dari perkiraan saya, sampai-sampai kopi saya belum habis saat titik data nyata pertama sudah muncul. Lalu seorang perawat bernama Denise mengambil shift itu, membatalkannya empat menit kemudian, dan mengambilnya lagi. Saya tidak tahu kenapa — mungkin ia memeriksa kalendernya sendiri di tengah proses dan sadar ada janji ke dokter gigi. Aplikasinya menanganinya dengan baik. Yang belum saya uji adalah tiga orang mencoba mengambil shift yang sama dalam jendela sepuluh detik yang sama, karena selama tiga minggu pengujian sendirian, skenario itu tidak pernah terpikir sama sekali. Sekarang pun tidak terpikir oleh saya. Yang terpikir justru oleh kenyataan, sekitar lima jam kemudian.
09:40 — sepi, dan saya jadi gelisah dengan kesepian itu
Tidak ada yang terjadi selama dua setengah jam. Tidak ada klaim, tidak ada postingan, tidak ada error di log. Saya tetap memeriksa dashboard empat kali, kebiasaan yang sebenarnya harus saya hentikan — build yang tidak digunakan bukan berarti rusak, hanya belum digunakan, dan itu dua masalah berbeda dengan solusi berbeda. Saya memaksa diri menutup tab dan mengerjakan hal lain.
11:52 — bug-nya
Endpoint klaim menerima ketiganya, karena saya menulis logika "tandai sebagai diambil" sebagai pemeriksaan update-jika-terbuka yang sederhana tanpa penguncian, dan dalam pengujian normal satu pengguna kondisi balapan seperti itu memang tidak pernah punya ruang untuk terjadi. Dengan tiga ketukan simultan dari tiga ponsel berbeda, ruangnya jadi banyak. Ketiga perawat menerima SMS konfirmasi bahwa mereka telah menutupi shift tersebut. Denise adalah salah satunya, untuk kedua kalinya hari itu, dan kali ini ia kesal.
Saya ingin jujur soal bagaimana saya menemukan ini — bukan dari monitoring. Priya mengirim pesan ini ke saya, lengkap dengan emoji tertawa, meski saya rasa ia tidak benar-benar bermaksud lucu, karena ini memang jadi masalah untuk sore harinya:
aplikasinya bilang 3 orang dapat shift yang sama lol
12:10 — masuk ke chat build
Saya menjelaskan bug tersebut dengan bahasa sederhana: beberapa orang bisa mengambil satu shift jika mereka menekan tombol hampir bersamaan, padahal seharusnya hanya satu klaim yang berlaku. Saya tidak mencoba menulis sendiri perbaikannya lebih dulu, sebagian karena saya sedang di ponsel di tempat parkir, dan sebagian karena menjelaskan kegagalan secara presisi biasanya lebih cepat daripada mendiagnosisnya secara presisi. Agen tersebut melacaknya ke ketiadaan row lock pada tabel klaim, dan mengusulkan beralih ke pembaruan bersyarat yang atomik — klaim berhasil hanya jika status shift masih "terbuka", dan operasi itu sendiri yang menentukan siapa yang menang, bukan pemeriksaan-lalu-tulis yang membuat tiga permintaan sama-sama melihat "terbuka" sekaligus. Itulah bug sebenarnya dalam satu kalimat, dan ini jenis hal yang jelas begitu diucapkan tapi tak terlihat sampai sesuatu memaksanya muncul.
12:34 — perbaikan dirilis, dan saya membuat Priya menunggu
Patch-nya kecil. Saya tetap tidak langsung mendorongnya ke domain aktif di tengah shift yang berjalan — saya menjalankannya dulu pada versi pratinjau dan meminta rekan kepala perawat Priya, yang sedang tidak bertugas, mencoba hal yang sama, tiga ketukan sekaligus, dari tiga tab browser. Itu berhasil menahannya. Satu klaim berhasil, dua lainnya mendapat pesan "shift ini baru saja diambil orang lain" alih-alih konfirmasi palsu. Saya merilisnya pukul 12:34, sekitar empat puluh dua menit setelah bug terjadi, yang terasa lambat saat itu tapi terasa cepat jika dilihat kembali.
14:00 hingga 18:00 — bagian yang membosankan tapi bagus
- 11 shift lagi diposting
- 9 diambil dengan bersih
- 2 kedaluwarsa tanpa diambil dan masuk ke papan yang masih dikelola manual oleh Priya — dan itu tidak masalah, alat ini tidak perlu menyelesaikan segalanya di hari pertama, cukup menyelesaikan hal spesifik yang tadinya rusak
- 0 klaim ganda lagi
Saya memantau angka-angka, bukan membayangkan hasilnya, sebuah kegiatan yang berbeda dan jauh lebih tenang.
Apa yang akan saya lakukan berbeda
Dua hal.
- Saya akan menjelaskan skenario klaim bersamaan di prompt build awal, bukan menemukannya saat sudah live — "beberapa pengguna, aksi yang sama, momen yang sama" hanyalah satu kalimat, bukan permintaan yang sulit, dan saya hanya tidak terpikir untuk memasukkannya karena pengujian saya sendiri pada dasarnya bersifat berurutan; saya hanya pernah mengklik satu tombol pada satu waktu.
- Saya terlalu banyak menghabiskan waktu di minggu kedua untuk memoles kata-kata notifikasi SMS — tiga kali menulis ulang teks konfirmasi yang tidak dikeluhkan siapa pun — dan kurang berinvestasi justru pada jenis kasus konkurensi yang sudah pasti akan terjadi di hari pertama, ketika satu bangsal penuh perawat yang sedang istirahat semuanya menatap ponsel di saat bersamaan.
Peluncuran berikutnya, saya akan lebih sedikit menghabiskan waktu memoles teks yang tidak akan dikritik siapa pun, dan lebih banyak bertanya "apa yang terjadi jika lima orang melakukan ini sekaligus," karena untuk apa pun yang punya lebih dari satu pengguna nyata, cepat atau lambat, akan ada yang melakukannya.



