Edge cases

Arseni Mourzenko
Founder and lead developer
176
articles
September 8, 2023
Tags: quality 36 management 34 interaction-design 9 user-experience 10

Soft­ware prod­ucts are de­signed for the cas­es where things go right, the sit­u­a­tions, where net­works are per­fect­ly flaw­less, servers don't re­boot ran­dom­ly, and process­es hap­pen as they would hap­pen in an ide­al world.

Soft­ware de­vel­op­ers are well known for their op­ti­mism. If a func­tion needs to read a file and process some in­for­ma­tion it it, they would code a func­tion with the as­sump­tion that the file ex­ists, that it is read­able, that it is not emp­ty, and that the data it con­tains is in an ex­pect­ed for­mat. “If things go wrong, we could han­dle those cas­es sep­a­rate­ly”—they think. But it's not if, but when.

Man­agers are rather com­pla­cent there. And so are the de­sign­ers. It all comes to the in­her­ent cost of han­dling the edge cas­es. The de­vel­op­er thinks: “how un­like­ly would be the case where the file I have to read ex­ists and is read­able, but con­tains an in­valid JSON that can­not be parsed?” The de­sign­er thinks: “Why, I don't have to spend an ex­tra hour think­ing about the prop­er han­dling of a sit­u­a­tion that may not even hap­pen that much.” And the man­ag­er has to jus­ti­fy the cost of all the ex­tra ef­fort for a fea­ture that may be con­sid­ered not that im­por­tant, af­ter all. It's cer­tain­ly not for the MVP, and... sprint af­ter sprint, there is nev­er enough time to work on it.

And so we end up with a prod­uct which works only in an ide­al world. And when it hits the re­al­i­ty in the face, it sucks.

The prob­lem with this ap­proach is that a prob­lem, when it oc­curs, costs much more when it's not han­dled prop­er­ly by the soft­ware.

It may be an in­her­ent cost, like in “Why, we weren't mon­i­tor­ing the re­main­ing disk space on our servers, and now our en­tire tool-chain is down, and we have no idea how to start it, be­cause some­one has to con­nect to the prob­lem­at­ic servers, but one can't SSH to it, be­cause it doesn't have enough disk space, and... well, we're sit­ting here, and have no idea what to do next.”

But it may also be the in­di­rect cost. I would like to il­lus­trate this case, with an ex­am­ple from FedEx. Al­though, I should note, that where I live, the fol­low­ing il­lus­tra­tion has noth­ing ex­cep­tion­al com­pared to Chrono­post, DHL, and La Poste, which all seem to com­pete for the sta­tus of the worst ser­vice qual­i­ty ever.

Re­cent­ly, I or­dered some PC com­po­nents in Chi­na. On Mon­day, they were shipped by FedEx, and I was hap­py to learn that they will ar­rive in three days, that is, by Thurs­day.

Thurs­day morn­ing, I checked the track­ing on FedEx site, and here is was, the mes­sage that was telling that the par­cel will ar­rive be­tween 8:40 a.m. and 12:40. Nice.

And so I wait­ed.

At 1 p.m., I checked the track­ing again. This time, it was claim­ing that the par­cel will be re­ceived be­fore 6 p.m.

And so I wait­ed.

In the evening, the mes­sage changed. De­liv­ery be­fore the “end of day,” was it say­ing. What end of day? What does it even mean? Should I ex­pect the de­liv­ery guy to ar­rive at 11:59 p.m.? Do they even work af­ter 6 p.m.?

Ob­vi­ous­ly, there was no par­cel this day. And the next morn­ing, the web­site was fi­nal­ly say­ing that there is a prob­lem—that my ship­ment was de­layed. It took four it­er­a­tions and an en­tire day for FedEx to un­der­stand that the ship­ment was de­layed? Se­ri­ous­ly?!

I checked it one more time dur­ing the af­ter­noon. This time, the de­layed warn­ing was gone (FedEx seems to con­sid­er that it's not de­layed any longer; in­ter­est­ing!), and there was a new mes­sage, telling that I should ex­pect my par­cel from 12:46 to 4:46 p.m.

And so I wait­ed.

I got it even­tu­al­ly. At 5:10 p.m. From Thurs­day 9 a.m. to Fri­day 5:10 p.m., the web­site of FedEx was spread­ing mis­in­for­ma­tion.

At 7:24 p.m., I got an SMS: “FedEx planned to de­liv­er your pack­age 783286154260 to­day. To stop SMS, send stop.” It could even be fun­ny, if it wasn't so sad.

Some­one, some­where, was work­ing on those track­ing fea­tures. I'm even sure that FedEx spent a great deal of mon­ey on that. But the guys work­ing on it as­sumed an ide­al world, where parcels are de­liv­ered on time, and where the guys who work at sort­ing cen­ters do their job, and do it right. And then there was a FedEx sort­ing cen­ter not far from Paris, where things were get­ting like they get in any sort­ing cen­ter out there, with peo­ple who ab­solute­ly don't care. The in­ter­ac­tion of both sys­tems gave us that.

“So what,” you may ask. In­deed, it's not a great deal that a par­cel was de­liv­ered one day lat­er.

The great deal is to add in­sult to in­jury with the way FedEx was han­dling the prob­lem. The track­ing was show­ing only two things:

This, in turn, gives a ter­ri­ble im­pres­sion of FedEx. Would I en­trust them with a par­cel when I need to send some­thing im­por­tant? Ab­solute­ly not. Again, not be­cause they were late with this one, but be­cause they have ac­tive­ly shown that they don't care. Would I rec­om­mend FedEx to oth­er peo­ple? I think you know the an­swer. Do they care? I'm sure they don't. And I'm also sure they should.

Soft­ware prod­ucts should take a great care han­dling prob­lems in prop­er ways. When a user is al­ready un­hap­py with some­thing, a soft­ware prod­uct should try to rec­ti­fy the sit­u­a­tion, in­stead of mak­ing it worse.

If it does, the per­cep­tion of the user for this soft­ware prod­uct changes dras­ti­cal­ly. One may start notic­ing all the bad things in the in­ter­face, and those bad things would an­noy the user even more. For in­stance, if the track­ing was han­dling the prob­lem in a cor­rect way, I wouldn't have no­ticed how bad their vir­tu­al as­sis­tant is—I wouldn't even use it in the first place. Or I wouldn't have no­ticed the fact that FedEx pre­tends that Italy is a lan­guage, and... seems to sug­gest that “Italy” is spo­ken in France? Or maybe that as a user in France, I'm ex­pect­ed to switch the in­ter­face be­tween Eng­lish and Italy [sic]?

How to avoid be­ing in such sit­u­a­tion?

First at all, pri­or­i­tize bet­ter. Yes, there is a hap­py path where every­thing hap­pens flaw­less­ly. But the cas­es where things go wrong are not that un­usu­al. Maybe in Unit­ed States, parcels are al­ways de­liv­ered on time. But there are coun­tries where things are dif­fer­ent, and it hap­pens for those coun­tries to have cus­tomers as well.

Sec­ond, eat your own dog food. If you're in the busi­ness of de­liv­er­ing parcels, send a few parcels from time to time to your friends, or ask a friend to send it to you, and see what hap­pens when things go wrong—and they will. If you're in a dif­fer­ent busi­ness, you can still find a way to use the soft­ware prod­uct you de­vel­op.