I want to start off with the Hanlon’s razor:
Never attribute to malice that which is adequately explained by stupidity.
I’m going to talk about iMessage and about what I perceive as technologists making myopic decisions about how something should work. If you’re reading this you are most likely in IT, and perhaps even a programmer: we are trained to look for edge cases, trying to imagine the worst case and still having the damned thing work. Also, if you are in IT, you are aware about the hub-hub going around that Android switchers are penalised for the switch as text messages sent from iPhone users never arrive. I am, by now, convinced it is totally caused by the developers of iMessage living in a tech ivory tower. However, this is not what I’m going to talk about: I’m going to talk about iPhone users being unable to communicate in certain edge cases.
An iPhone can send SMS, the “speech bubbles” in such a conversation are green. The way they are sent are through your cellular network: it works even if you have no data connection at all, not even GPRS. SMS is part of the GSM specification and is considered “best effort”. Despite that, it is incredibly reliable.
Contrast to iMessage, the blue “speech bubbles”, where a data connection is needed to send and receive messages. It doesn’t matter how you connect to the Internet, GRPS, 3G, Wifi Avian Carriers, as long as there is Internet. At first, you do think this is a rather reasonable condition, after all iPhone users are tech-savvy always-connected people who can’t live without their precious Internet. Right? Right?
How do I compose that sarcasm sign again?
The trouble is that iMessage, presents itself as a SMS (“Text Message”) replacement, without a way to revert back. Now first, I’ll tell you why it works so well in most settings. We, even the non-tech users, are pretty much connected 24/7 to the Internet in our daily lives. At home you have your wireless setup, at your workplace probably too, the Wireless of your preferred junk-food and junk-beverage places are configured and working. Even if that’s not the case, at least where I live, iPhones are sold with a reasonable data plan. You simply don’t care, anywhere in the country you are connected, which makes the difference between iMessage and SMS totally oblivious to the end-user and this is the typical “It just works” mentality that Apple is famous for. For iPhone users iMessage and SMS are the same thing.
First, to iMessages defence, I don’t know how it gets activated. Perhaps I did that myself, perhaps I clicked away an annoying dialog and accepted it one day. I don’t remember. Fact is, my wife, my mother in law and myself all use iMessage and I sure as hell didn’t “install” or “configure” it in the traditional sense. It was there, one day, and it worked. It might be my fault it has been activated.
So, here is how I found that iMessage has an unfixable problem, at least one I can’t fix, or I haven’t found the appropriate fix. The story involves three iPhone users, two of which are non-tech and yours truly.
My wife has been in Switzerland for surgery the last four weeks, and I made sure she could go on the hospitals wireless (Those Swiss sure know how to do wireless: the whole campus is flawlessly covered!). I even made sure she has my Ultrabook so she could waste all her time, trying to ignore pain. Well, that was of no use, as it seems that she basically uses her phone exclusively and she seems to use text messages all the time. I’m not big brother, but I know that at least her mother and me are those whom she communicates most with using SMS, of course, in reality that’s iMessage.
This works as, I’m always online and my mother in law has the “fuck-yeah-all-the-data-you-want” plan. Messages always arrive, life is sweet, the Internet is a blessing. Last weekend (I visit her every weekend), my wife tells me that her Mom can send her “texts”, but the texts she makes to her Mom never arrive.
This makes me look into the issue, and I realise: Mother in law is not in Luxembourg. She’s on vacation somewhere in Austria. That means roaming, and the default setting on iPhones is to disallow data roaming, which is a good thing. This means that my mother in law, does not have Internet connectivity. Knowing her, she will be unable to connect to public wireless hotspots.
To mother in law, everything looks normal. She is doing the same as always: sending “SMS” to her daugher and they arrive. The phone probably has the “Send as SMS” option activated, which falls back to SMS when no Internet connectivity is present. That is good. On my wifes side, however, her iPhone decides: “This is an iPhone, it can receive iMessage, so let’s send iMessage”. This is, I stress, not configurable. Not per number, not any where. So, my wifes messages to her mother disappear somewhere in a message queue somewhere on an Apple server to be delivered to her mother when her mother gets on the Internet, which will be in a week or two. Brilliant, just brilliant!
I have tried everything, deleting all Mother/Daughter threads on my wifes iPhone, deleting her moms contact entry in order to make it forget that it’s an iPhone and tell it that it’s a “mobile”. Nothing helped. There was no way to convince her iPhone to send SMS instead of iMessage to my mother in law. None.
I gave up in frustration and explained it to my wife, who was very patient and understanding, that we would have to disable iMessage and revert to SMS pure. It would be more expensive, as she is roaming too, but it at least she would be able to communicate with her mother and the problem would be gone. I did so, and indeed it worked.
Now think about this twice: at that point I did a major thinking error. Let me explain. That night I go to the hotel and about around midnight I get a text message from my wife whether I’m still awake. I was and I replied. To my surprise, I didn’t get a reply to my text. My logic error manifested itself, but I didn’t realise it yet. I only understood the next day: We shifted the problem. My phone was now insisting on sending iMessages to my wifes iPhone, but I totally disabled iMessage on her phone. Yup, my messages were now the ones being held somewhere on an Apple server. Of course, I could disable iMessage on my phone, but I have people at work using iPhones who write me iMessages, which I then would then not be able to get. I can’t do that, it is my work phone after all.
So, in the end, I had to put my wife before a choice: Be able to communicate instantly with me or with her mother. She chose me, which is flattering of course. I reactivated iMessage on her phone, which then caused a re-authentication and an SMS to a UK phone number, which will cost us money. Okay, not much, but I know it will.
This all boils down to the developers of iMessage being totally confident that people will have Internet connectivity on their iPhones at all times and not providing a fall-back method. This is provably not the case, especially to people who go to foreign countries. Apple employees do seem to know about this, after all the default setting for roaming is reasonable.
What should happen is that after a timeout period, the iMessage should be sent per SMS. This can be done, by relaying the “not able to send” information back to the phone and perhaps even asking for permission (or just do the damned thing transparently, you’re Apple for crying out loud). This would also fix the issue that Android switchers have. Alternatively, they could use a SMS gateway of their own. This does shift the cost to Apple, so it is understandable that they don’t want this.
Sure, it would delay the message a bit, but that seems totally acceptable. Delayed transmission is preferable over undelivery.
Also, let the user choose per contact whether to send SMS or iMessage. The information is there in the “contact” entry. If the number is specified as “mobile”, send SMS, if it is specified as “iPhone” it is send as iMessage and then use the fall-back mechanism to avoid situations like the one I described. At least, with such a system, I could have fixed it.
Now, I may have overseen something, or have misunderstood an option or setting somewhere. I am confident enough to tell you: If I did something wrong, this rant is totally irrelevant. If it is, I sincerely apologise to the iMessage developers. If not: please, get your act together, you are developing for non-tech users. Keep that in mind.