A Modest Feature Request
The Au Bon Pain in our student center has recently started using an iPad application for customers to enter their sandwich orders. In the past, you would order a sandwich by filling out a paper form. You’d pencil in your name and sandwich selection and deposit the form to a tray, from where your order would be picked up and processed by the next available sandwich chef. The new system eliminates the paper forms completely, as the iPad transmits the orders electronically.
During the first week, it was an Au Bon Pain manager who would take orders on the iPad. She has explained that it was a way to “squelch all the bugs” before the customers start using the application. After ordering my favorite Mediterranean Wrap, I inquired “Wouldn’t be nice to know what the approximate wait time is?” “What a great idea! Let me write this down.” Well, as a researcher, I come up with new ideas for a living. I also well-realize that not all of my ideas are worth implementing. I also teach courses in software design and engineering on a regular basis, and it immediately occurred to me that this feature request can make a useful teachable moment.
So, as I was waiting for my sandwich to be prepared, I started thinking about what it would take for the developers of this sandwich ordering application to fulfill my feature request, adding the functionality that would display the expected wait time upon completing an order. It immediately occurred to me that implementing this feature may not be trivial. First of all, to make any wait predictions, the system must timestamp when the sandwiches are ordered and done. Even if this functionality is already there, the client part of the application (running on the iPad) may not have the information about the length of the sandwich queue at the server. The client part is likely to simply accept orders and send them the server, which maintains the queue. So if the client is to be able to display any wait information on the iPad, the server interface would have to be extended to provide this information.
One can think that calculating the average wait time is easy. Just calculate N*T, where N is the length of the sandwich order line and T is the average time to prepare a sandwich. However, this formula is unlikely to produce an accurate estimate. Several sandwich chefs usually work in parallel, with different levels of productivity that depends on various factors such as their natural ability and experience. Also, not all sandwiches are created equal–some of them may take longer to prepare than the others. From time to time, sandwich chefs may need to interrupt their work to bring over various sandwich ingredients from somewhere in the back storage. The system probably does not keep track of how many sandwich chefs are present and what their individual productivity is. Adding all this information to the system is likely to significantly complicate its implementation.
To predict the wait time more or less accurately would require using queuing theory, which may require encoding some statistical formulas. Overall, adding this deceptively simple-sounding feature is likely to require substantial changes to the system’s design and implementation. Also, testing the new feature once it is deployed would also take additional resources.
Now the big question is whether all this extra effort would be worth it? Would Au Bon Pain sell more sandwiches if their customers are given an accurate estimate of the time it’d take to make a sandwich? To answer this question would require thinking through representative use cases. Let us walk through a use case that I encounter quite often. Say I have a class to teach in 30 mins. I feel hungry and having a sandwich sounds like a great idea. I also know that it takes me about 10 minutes to get from the Au Bon Pain store to the classroom. If the system informs me that it will take anything longer than 10 minutes to prepare my sandwich, I would definitely cancel my order, lest I be late for class. This use case shows that this feature may in fact cause Au Bon Pain to lose potential customers!
Looking back, it no longer looks like my suggestion to add the expected wait time feature to the new iPad sandwich ordering system is such a good one. It is not trivial to implement properly, and it may not help the store’s bottom line. A better alternative may be to add a simpler feature that shows the length of the sandwich order line. I often wonder whether all these students hanging around the store are just socializing with their friends or are waiting for their sandwich to be made. Implementing this feature is quite straightforward, and optimistic, short-on-time customers may still choose to wait for their sandwich when given the number of pending orders rather than the expected wait time.