I had a very interesting and somewhat terrifying experience traveling home from Boston yesterday. When I arrived at the ticket counter with my wife and toddler, they proceeded to inform us that while his ticket had been issued, our seats had been "reserved, but not ticketed". It turned out there had been some agent error and they had put our seats on "Courtesy Hold" instead of just booking them, and that was combined with some sort of computer error where the hold was automatically cleared. Ultimately, we got on the flight, but after the fact, I was in a distance debugging mindset and tried to think of the fundamental issues, and how they might be prevented in the future.
- The system was in an essentially impossible state according to the average person's (i.e. my) mental model. I wasn't aware that we could exist in a limbo state where we had reservations but not tickets, although I do now. Developers tend to put those kinds of states into programs all the time, sometimes directly, sometimes implicitly. Usually they are meant as a temporary "holding" state to allow a certain transition to take place, as was in this case in the form of a "courtesy hold", whatever that means. However, in my experience, these states are the source of most problems, because the people on the inside (the gate agent) have the problem of not only trying to understand it themselves, but they have to communicate it to a stultified outside party. Also, since they are generally poorly understood, humans almost always do The Wrong Thing when they are encountered, leading to a worse situation as in this case where our hold was unceremoniously cancelled at some point.
- This state was indistinguishable from the normal, ticketed state. We received confirmation emails with an itinerary, etc. The only clue I might have had is that we were billed only for my son's ticket. If you are going to allow in-between states that exist only in software, at least make a huge note of it any communication so that we know.
- It turned out that my 18-month-old son had in fact been ticketed, so there was actually a ticket in the system for solo infant flyer. I'm guessing that should not have been allowed or should have been flagged immediately.
Once the gate agent determined that we had done nothing wrong and that we truly had all the stuff you would have had if you had actually been ticketed, she proceeded to try to get us our tickets. Oddly, the real problem wasn't that the plane was full, it was that she wanted to get us our original fare, as well she should. She kept saying things like "the fare no longer exists", which to me brought up another key point: many times software keeps users from doing necessary things, I assume in an effort to avoid fraud. For example, you can't arbitrarily change the price of a piece of clothing or a hamburger at the register. This makes sense from the corporate point of view; they don't have to worry about someone giving all their friends a 50% discount. On the other hand, if you've ever waited for 15+ minutes when an item rings up wrong and no one on site has the power to change it, you can easily see the downside. This is the state we found ourselves in. The agent was very nice about it and was able to get our original fare eventually, but it took multiple phone calls and lots of typing.
It seems like there is a better way to handle these circumstances: auditing. Allow users to make justified changes at the "register", with a required explanation and an audit timestamp and user credential. If people knew that any time they access these features it raises a flag, they would be unlikely to try them for fun and profit. Or better yet, stop sweating it so much. The small amounts you lose in employee theft would be compensated by greater customer satisfaction. I am hesistant to fly this airline again (although I'm sure I will due to their greater availability of direct flights), but I will likely think twice when there are competing fares and routes. As it stands, employees are restricted from certain types of fraud, but they are also prevented from meeting customer needs.
