Edge cases
Software products are designed for the cases where things go right, the situations, where networks are perfectly flawless, servers don't reboot randomly, and processes happen as they would happen in an ideal world.
Software developers are well known for their optimism. If a function needs to read a file and process some information it it, they would code a function with the assumption that the file exists, that it is readable, that it is not empty, and that the data it contains is in an expected format. “If things go wrong, we could handle those cases separately”—they think. But it's not if, but when.
Managers are rather complacent there. And so are the designers. It all comes to the inherent cost of handling the edge cases. The developer thinks: “how unlikely would be the case where the file I have to read exists and is readable, but contains an invalid JSON that cannot be parsed?” The designer thinks: “Why, I don't have to spend an extra hour thinking about the proper handling of a situation that may not even happen that much.” And the manager has to justify the cost of all the extra effort for a feature that may be considered not that important, after all. It's certainly not for the MVP, and... sprint after sprint, there is never enough time to work on it.
And so we end up with a product which works only in an ideal world. And when it hits the reality in the face, it sucks.
The problem with this approach is that a problem, when it occurs, costs much more when it's not handled properly by the software.
It may be an inherent cost, like in “Why, we weren't monitoring the remaining disk space on our servers, and now our entire tool-chain is down, and we have no idea how to start it, because someone has to connect to the problematic servers, but one can't SSH to it, because it doesn't have enough disk space, and... well, we're sitting here, and have no idea what to do next.”
But it may also be the indirect cost. I would like to illustrate this case, with an example from FedEx. Although, I should note, that where I live, the following illustration has nothing exceptional compared to Chronopost, DHL, and La Poste, which all seem to compete for the status of the worst service quality ever.
Recently, I ordered some PC components in China. On Monday, they were shipped by FedEx, and I was happy to learn that they will arrive in three days, that is, by Thursday.
Thursday morning, I checked the tracking on FedEx site, and here is was, the message that was telling that the parcel will arrive between 8:40 a.m. and 12:40. Nice.
And so I waited.
At 1 p.m., I checked the tracking again. This time, it was claiming that the parcel will be received before 6 p.m.
And so I waited.
In the evening, the message changed. Delivery before the “end of day,” was it saying. What end of day? What does it even mean? Should I expect the delivery guy to arrive at 11:59 p.m.? Do they even work after 6 p.m.?
Obviously, there was no parcel this day. And the next morning, the website was finally saying that there is a problem—that my shipment was delayed. It took four iterations and an entire day for FedEx to understand that the shipment was delayed? Seriously?!
I checked it one more time during the afternoon. This time, the delayed warning was gone (FedEx seems to consider that it's not delayed any longer; interesting!), and there was a new message, telling that I should expect my parcel from 12:46 to 4:46 p.m.
And so I waited.
I got it eventually. At 5:10 p.m. From Thursday 9 a.m. to Friday 5:10 p.m., the website of FedEx was spreading misinformation.
At 7:24 p.m., I got an SMS: “FedEx planned to deliver your package 783286154260 today. To stop SMS, send stop.” It could even be funny, if it wasn't so sad.
Someone, somewhere, was working on those tracking features. I'm even sure that FedEx spent a great deal of money on that. But the guys working on it assumed an ideal world, where parcels are delivered on time, and where the guys who work at sorting centers do their job, and do it right. And then there was a FedEx sorting center not far from Paris, where things were getting like they get in any sorting center out there, with people who absolutely don't care. The interaction of both systems gave us that.
“So what,” you may ask. Indeed, it's not a great deal that a parcel was delivered one day later.
The great deal is to add insult to injury with the way FedEx was handling the problem. The tracking was showing only two things:
- FedEx has no idea where the parcels are, and what really happens in their sorting centers, and:
- They couldn't care less.
This, in turn, gives a terrible impression of FedEx. Would I entrust them with a parcel when I need to send something important? Absolutely not. Again, not because they were late with this one, but because they have actively shown that they don't care. Would I recommend FedEx to other people? I think you know the answer. Do they care? I'm sure they don't. And I'm also sure they should.
Software products should take a great care handling problems in proper ways. When a user is already unhappy with something, a software product should try to rectify the situation, instead of making it worse.
If it does, the perception of the user for this software product changes drastically. One may start noticing all the bad things in the interface, and those bad things would annoy the user even more. For instance, if the tracking was handling the problem in a correct way, I wouldn't have noticed how bad their virtual assistant is—I wouldn't even use it in the first place. Or I wouldn't have noticed the fact that FedEx pretends that Italy is a language, and... seems to suggest that “Italy” is spoken in France? Or maybe that as a user in France, I'm expected to switch the interface between English and Italy [sic]?
How to avoid being in such situation?
First at all, prioritize better. Yes, there is a happy path where everything happens flawlessly. But the cases where things go wrong are not that unusual. Maybe in United States, parcels are always delivered on time. But there are countries where things are different, and it happens for those countries to have customers as well.
Second, eat your own dog food. If you're in the business of delivering parcels, send a few parcels from time to time to your friends, or ask a friend to send it to you, and see what happens when things go wrong—and they will. If you're in a different business, you can still find a way to use the software product you develop.