We have a course registration system. Each course has a set of seats allocated. ONLY when the actual order is placed is the seats allocated decremented. Therefore, at the moment, it is possible for the seats registered to be overallocated for course.

We want to prevent overallocation of seats.

So far I've come up with 3 ways, if there is only 1 seat remaining:

  1. First to place the order gets the registration, the other user is shown a waiting list page
  2. As soon as the course is added to the shopping cart, the seat total is decremented and no one else can order this course till the users session timesout (25mins+).
  3. As soon as the course is added to the shopping cart, the seat total is decremented and no one else can order this course for a "fixed amount of time"...say 5 minutes to give the user a fair amount of time to place the order/decide.

To me, number #3 sounds like the fair approach. Does anyone have any examples of other ecommerce systems on how they handle the above problem? Per day, we get about less than 20 orders.

  • 1
    It's pretty common when ordering gig/theatre/etc tickets for them to be temporarily reserved at the start of the ordering process. 15 minutes or so for the user to complete the ordering process. I'll see if I can find an example.
    – Fractional
    Jan 16, 2014 at 17:03
  • If an answer helped you, it would be nice if you would accept one of the. Jan 26, 2014 at 13:48

4 Answers 4


I would combine the waiting list and a fix time slot and get the benefits of both.

  1. Waiting lists aren't just helpful when tickets are getting short. You can use them even if your course is sold out for days to resale returning tickets.

  2. A fix time slot sets the user a bit under pressure (in a good way) and, different from a refreshing session timeout, prevent users from blocking a ticket spot too long.

The ticket seller Amiando has implemented such a mechanism:

enter image description here


www.eventbrite.com, event management/registration service, uses option #3, which is probably the best approach:

enter image description here


Option #3 is the best approach. The only reason to not do it is difficulty of implementation. It prevents people from going through the checkout process when there may not be a seat, and incentivizes people to complete their transaction by showing them a timer, which creates urgency.

I would recommend against option #2 because then you will have inventory blocked for an unnecessarily long time.

Option #1 may be okay still if you get a very low number of orders like you say. You can just tell the customer "Sorry, someone else took the last spot" if there is no longer any inventory at the end of the purchase. If the average checkout completion time is 5 minutes and you have 20 orders per day, the chances of there being a collision are quite low.


Although 3 is best, I think any of them is ok. One advantage of #1 is you're more likely to get the person to actually join the waitlist, since they're a bit more invested in the process - rather than seeing that the event is sold out and abandoning. It depends, I think, on how firm the attendance cap is, what the likelihood of the waitlist being fulfilled is etc.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.