I've spent the last week doing a lot of research into the cart process in an attempt to understand why it is exactly that they have a habit of breaking under the strain of a limited edition nail polish launch. The slow response from Shopify had me both thoroughly questioning and testing rival solutions, as well as having a talk to a few old colleagues to try and break it right down to the finer details. I've made quite a few contacts bouncing around IT jobs for the last 16 years and it was a good chance to pull in some favours.
This may be a little long winded, and I will try to keep it as non-technical as possible, but I thought it was worth sharing not just in regards to the Naughty Night Shift Nurse debacle, but also so you may understand why the hiccups occur elsewhere as well. I'm like a dog with a bone when broken logic comes into play, and I've ended up educating support staff on how their own carts by the end of it.
Firstly, lets remove the terms "cart jacking" and "cart hold" from the equation. I threw these terms at all of the people I have spoken to and it flew clean over their heads. I think the reliance on simplifying the situation down to these two terms has done a lot to confuse people and cause unnecessary frustration.
There is essentially three points where the items you are purchasing can be removed from inventory - when they are added to cart, when you hit checkout, or when you finish the entire payment process. The first option is what most refer to as a cart hold, though it is no longer used all that often. It causes a lot of it's own inventory problems as it really isn't preferable to sell out of an item momentarily because someone who has decided to leave the item behind has it sitting in their cart. Most carts now use the second or third method, or a kind of combination from the two, as we currently have. Let's go over that process.
Using the NNSN sale as an example, we'll go through step by step and explain where the problems lie.
1. The first 99 bottles were nabbed up, and locked in the moment "Checkout" was clicked. Those lucky 99 have their easy 5 minutes to go through PayPal within their 5 minutes.
2. Clicks for the last bottle are registered simultaneously from multiple people. Shopify send these requests to PayPal all at once, waiting to receive notification from PayPal that they have arrived at checkout and the item should be held.
3. The PayPal process has already begun for those that grabbed that last bottle, though the message has been sent back to Shopify to notify it of who went to checkout first and it has already been decided who won out of that group of people, and Shopify is waiting on their return to tell them they have lucked out.
4. The inventory is allocated, but not officially removed from stock until the payment process of each customer is completed. That means that people can still add it to their cart, but will be told it out of stock when they try to go to checkout. They never at any point actually had the item.
5.When all payments are finalised, the stock is actually removed and the item is shown as out of stock.
So basically, the weakness in the system is that very last item and the time it takes for PayPal to communicate. In reality, we're talking about a very small window, but we can now estimate that NNSN was actually sold out in less than a minute, possibly even 30 seconds. There was no special technique by the lucky ones, they just got in quick enough, and those that suffered the PayPal heartbreak really were unlucky by milliseconds. You were all just faster than the system. I can tell you that there were a couple of people that took a while to complete payment, as Kaz and myself were even wondering at the time why no one was taking up the last two bottles, and that would left a lot of people grabbing at thin air.
Despite this, and as every single person I have spoken to on this matter has said to me, the system worked. While we have been looking at how this system works for you guys; our customers, we've really been looking at this from the wrong angle. We are the customers, not you guys, and it's their job to provide us software that manages the most important thing - not overselling. We most definitely didn't do that. I can even quote one support officer from a competing cart system as saying "If you sold out, then you met your goal. How exactly is that a problem?" Hard to argue really and a little eye opening. I've always openly admitted that we don't wear the typical salesman hat that most would expect, so we honestly never even looked at it in that way.
So how to stop, or at least reduce the disappointment? The first option is setup a new credit card gateway that is more closely integrated with the cart. That will reduce the second or two in possible communication delay from PayPal for those that choose to use it. The other option is to investigate other shop options to see if it can speed up the response.
In reality, we can't load test a new store until the actual heat of the moment, but we are looking at moving sites anyway. We have been content at Shopify, but this situation has made us look elsewhere and we have liked what we have seen. We may be up and running elsewhere by this time next week. We'll see how that pans out.
I hope that helps explain a few things for some people out there. I hope you can all understand that even missing out after getting through PayPal is preferable to buying an item that doesn't actually exist. If anyone has any further questions or would like a bit more detail on something then please feel free to ask.Otherwise, time to get back to things a little less serious.