Ideally the booking app does this. This is so that when other customers are looking at the availability of the services the time slot is taken 'off the shelf' while the reservation is active. We have it built in to our booking App (BookThatApp) specifically for this reason (i.e. to avoid over-bookings). When the reservation expires you can configure it to clear the cart, or try to book it again for the same time. There are also a number of edge case scenarios you need to cover off (some of it covered in our documentation) if you are trying to build this yourself so I wouldn't recommend that.