Kalender booking sering terlihat sederhana: pilih layanan, pilih orangnya, lalu pilih jam. Justru pada langkah terakhir itulah aturan sebenarnya bekerja. Slot pukul 10.00 tidak otomatis kosong jika ada layanan pukul 09.30 yang baru selesai pukul 11.00.
Saat mengerjakan alur reservasi pada Maro Barbershop, saya memperlakukan booking sebagai rentang waktu, bukan titik pada kalender. Pelanggan memang melihat pilihan jam mulai, tetapi sistem harus menghitung jam selesai dari durasi layanan sebelum menyatakan slot tersedia.
Setiap layanan memakai waktu yang berbeda
Potong rambut, cuci dan potong, serta pewarnaan tidak memerlukan waktu yang sama. Jika aplikasi hanya menandai setiap awal jam sebagai “terisi” atau “kosong”, dua booking bisa bertumpang tindih walaupun jam mulainya berbeda.
Di alur ini, slot kandidat ditampilkan per 30 menit, sedangkan waktu yang benar-benar diblokir mengikuti durasi layanan yang dipilih. Dua hal itu tidak boleh dicampur: interval tampilan membantu pelanggan menemukan pilihan, durasi layanan menentukan apakah pilihan tersebut aman.
Sistem juga memeriksa jam kerja kapster. Slot yang tidak bertabrakan dengan booking lain tetap tidak layak ditawarkan bila jatuh di luar waktu kerja orang yang dipilih.
Benturan terjadi saat rentang waktu bertumpang tindih
Perbandingan yang diperlukan bukan sekadar “apakah ada booking lain pada jam 10?”. Yang perlu diperiksa ialah apakah awal booking lama berada sebelum akhir slot baru, dan akhir booking lama berada setelah awal slot baru. Dengan cara itu, booking 09.30–11.00 akan berbenturan dengan usulan 10.00–10.45.
Booking yang sudah dibatalkan tidak lagi memblokir waktu. Status ini penting: kalau pembatalan hanya mengganti label pada layar tetapi tetap menahan slot di perhitungan, pelanggan melihat jadwal seolah-olah penuh padahal tidak.
Daftar slot belum menjadi jaminan
Ada jeda antara pelanggan melihat jadwal dan menekan tombol pesan. Dalam jeda itu, orang lain dapat mengambil slot yang sama. Karena itu, ketersediaan tidak cukup diperiksa saat halaman kalender dibuka.
Ketika booking dikirim, aplikasi memeriksa benturan lagi di dalam transaksi database. Baris kapster dikunci selama pemeriksaan dan penyimpanan, sehingga dua permintaan yang datang bersamaan tidak sama-sama mendapat kepastian atas waktu yang sama. Bila slot sudah berubah, sistem harus meminta pelanggan memilih waktu lain.
Ini contoh penting bahwa antarmuka yang terasa lancar bergantung pada aturan server yang konsisten. Tanpa pemeriksaan kedua, kalender dapat tampak benar tetapi konfirmasi booking tetap salah.
Alur pelanggan perlu mengikuti keputusan yang nyata
Urutan layanan → kapster → jadwal membantu pelanggan memahami kenapa jam tertentu muncul atau hilang. Durasi datang dari layanan; jam kerja dan booking yang sudah ada datang dari kapster. Menampilkan jadwal sebelum dua pilihan itu diketahui justru menghasilkan slot yang perlu ditarik kembali.
Pada layar, saya ingin alasan ketersediaan terasa masuk akal tanpa meminta pelanggan memahami rumus benturan waktu. Cukup tampilkan pilihan yang valid, harga dan durasi layanan yang jelas, serta pesan yang manusiawi bila waktu yang dipilih keburu diambil orang lain.
Jadwal yang rapi adalah soal kepercayaan
Pelanggan tidak melihat transaksi database atau logika interval. Mereka hanya ingin datang pada waktu yang sudah disepakati dan dilayani oleh orang yang dipilih. Itu sebabnya detail kecil seperti durasi, pembatalan, dan pemeriksaan ulang menentukan apakah fitur booking terasa dapat diandalkan.
Contoh layar pemilihan layanan dan jadwalnya ada di studi kasus Maro Barbershop.