Sekitar 300 orang daftar dan pakai website ini. Sistem war kuota harus nge-lock biar nggak over-quota — dan ini pertama kalinya aku ngehandle race condition di kode yang aku tulis sendiri.
Race condition bukan teori. Di fitur war kuota, banyak user daftar di detik yang sama dan sistem harus nge-lock supaya nggak ada yang double. Aku solve pakai DB::transaction() Laravel — dan sejak itu nggak pernah lupa konsep itu lagi.
Real users = real chaos. Pas sudah live, yang nyampe ke aku bukan cuma bug — tapi juga permintaan yang nggak pernah aku bayangin: peserta titipan, pemindahan kelas mendadak, rekap dadakan dari administrasi. Plan di awal nggak pernah cukup.
Pisahin staging sama production itu wajib, bukan opsional. Sebelum project ini aku deploy ke mana aja, yang penting jalan. Sekarang staging = safety net, production = yang dijaga.
BTNG (Basic Training for Next Generation) itu event tahunan DNCC — organisasi komputer di kampus. Aku ditugaskan sebagai Web Coordinator, dan di event ini peranku dobel: PM sekaligus Full Stack. Bukan project lomba, bukan tugas kuliah — ini pertama kalinya aku lead produk yang dipakai orang beneran. Dan di situlah ceritanya mulai ribet.
Fitur utamanya simpel: landing page event + sistem pendaftaran. Tapi sistem pendaftarannya model "war kuota" — kuota dibuka di jam tertentu, peserta rebutan, siapa cepet dia dapat. Aku langsung tahu di kepala: ini race condition. Kalau nggak di-handle, dua orang bisa sama-sama "lolos" padahal kursi udah penuh. Aku bungkus alur pendaftarannya pakai DB::transaction() Laravel — dan pas pertama kali ngeliat locking jalan, ada kepuasan kecil yang nggak bisa dijelasin. Akhirnya kepake beneran di production.
Setup CI/CD pakai GitHub Actions juga pertama kali di project ini. Aku pisahin environment staging sama production — best practice yang baru aku ngerti waktu itu. Deploy yang biasanya manual dan deg-degan, jadi klik tombol dan nunggu. Pengenalan kecil yang ngerubah banyak hal.
Yang nggak aku sangka: pas website udah live, yang dateng bukan cuma peserta. Dateng juga permintaan dadakan dari panitia dan administrasi. Peserta "titipan" — jalur admin, bukan form publik. Pemindahan peserta antar kelas yang harus dibikin manual. Rekap seluruh peserta yang diminta mendadak sama bagian administrasi. Belum lagi insiden: server down di tengah event, validasi error yang nggak informatif, user bingung salahnya di mana. Semua hal yang nggak pernah kepikiran pas briefing.
Ada satu hal yang aku syukuri sekarang: setiap orang di tim web punya kecepatan yang beda. Yang cepet aku kasih lebih banyak. Yang perlu revisi terus, aku review lebih intens. Yang molor, aku tag dan ngobrol langsung. Itu bukan skill yang diajarin di kampus — itu yang aku pelajari pas nge-lead project ini. Belajar manage orang lebih susah dari nulis kode.
Hasilnya: sekitar 300 peserta terdaftar dan event selesai tanpa dibatalin. Sistem war kuota jalan, permintaan admin terpenuhi, dan aku lulus dari satu jenis sekolah yang nggak ada di kurikulum manapun: lead produk yang dipakai orang beneran.