For a university project I have to design a web app which allows to pre-order the lunch in a restaurant. The brief asks to indicate the time of arrival and the number of people, in addition to the lunch to order. Moreover is mandatory to be registered with the service. I thought to ask for time of arrival and number of people before of the lunch's choice. But, here is the problem. The restaurant asks a notice of certain minutes. The service is thought for people who order in group, so the problem is that, if someone sets the time of arrival before of the lunch's choice, even knowing the notice time asked from the restaurant, is likely that during the time spent to choose the lunch, you go over the time of notice required and therefore will not be possible to book at the specified time before choosing the lunch itself. For example, if you set 13.30 as arrival time, and you start booking at 13.05 and restaurant ask you a notice of 20minutes, it means that the order has to be sent before 13.10 (13.10+20min = 13.30). The problem is that if you go over the 13.10 you can't go at the restaurant for lunch at 13.30, so there is a UX problem, because you have set the time before. The same problem occurs if I ask for time of arrival after the choosing of lunch (what happens if you choose your lunch and then the web app tells you that there are no more seats? you have spent time in choosing the lunch but you cannot eat at the time you want). I don't know how to solve this situation in order to provide the better UX. Hope I was clear. If not, please ask for more details.
This is a typical session problem where a booking procedure has to be fulfilled within a specific time in order to guarantee an expected result. Similar to booking a seat for a flight. You can't book 15min before lift-off (extreme example with other reasons also but nearly the same problem)
Only difference here is that your flight departure is dependent on the user input.
The easiest way would be to let your customer enter all time-depending details (arrival, people, lunch choice) into the booking system, which then tells the customer he/she has "4min left to finish the booking procedure" if the meals should be served at the desired time.
The system could offer alternative reservations if the time expires.
I think all these kind of controls/checks needs to be done as transparent as possible to the user. I would separated the registration and logged in from the booking UX and I will ask for it before set an arrival time (maybe the number of people can be set before). Basically because we don't really know how fast is the user in register himself and we can't count on that for the arrival and booking time.
In this way the booking process will be more clear and clean and can be use to promote a quick registration.
In the first case, setting arrival time before booking, can be solve setting a time-out of 5 min for example (supposing that the user is already registered and logged in); if the user only needs to set an arrival time and number of people I guess he won't need more time. Then you can ensure that the notice time is 20 min (counting after the 5 min of time-out).
The second case can be solved by blocking the seats for those 5 minutes for example, then you ensure that the user won't lose the seats in that time. But always thinking with an already registered/logged in user.
I would let the user choose the time after registering, choosing the menu, number of guests etc. I would also add 10 minutes as buffer. For instance, if the restaurant needs 20 minutes, I would add a 10 minute buffer on top of it.
The flow would be: User types URL > Registers > Goes through the Menu > Selects Items to Order/Quanity > Selects Time of Arrival > Confirms
It's always good to be completely transparent to your users. Let me know, if you need to discuss more.