As described on Wikipedia, TCP is one of the core protocols of the internet. What makes it so great is that it handles the sending and receiving of data in such a way that the receipt of data that has been sent is guaranteed (For a layman description of how TCP works, see the beginning of this post by Joel Spolsky). By contrast, UDP, another core internet protocol, is essentially throwing data at a wall and praying it makes it to the desired destination.
What’s probably most amazing about TCP is that we had it pretty well figured out in the 70’s. So, in 2011, why can’t I send a text message over a cellular network to another cell phone and know for sure whether or not it got there?
SMS messages have historically always been a hack. As summarized on Wikipedia, the length of an SMS was chosen in order to fit into existing signaling formats. A text message is sent using the same signals that are used to make your phone ring. The fact that carriers charge even 5 cents for something so trivial, while appalling and predatory, is not the subject of this post.
Given the modest history of SMS technology, I guess it is understandable that it is as unreliable as it is. Which is why I was so excited when Apple announced iMessages. The promise of free text messages, delivery confirmation, and “user is typing” notifications was depressingly exciting, given that I grew up with all of this functionality in AOL Instant Messenger.
I had no reason to doubt that Apple would do a great job with iMessages, because they would be using a cellular data connection or Wi-Fi to send and receive messages. Since TCP is a major tenet of internet communications, and we’ve had reliable IM and email services for years, how could Apple possibly screw it up?
Well, they have. My optimism dropped when I first received my iPhone 4S, and my friend’s contact was split in two: One for her phone number, and one for her e-mail address. Sending a text to either contact would get to her iPhone 4S, but the phone number contact would send an SMS, and the e-mail address would send as an iMessage. This wasn’t a big deal and eventually the phone number contact faded away into obscurity at the bottom of my SMS contacts, but I was not left with a great deal of confidence for the platform. (I’m not the only one with this problem.)
Even the implementation of detecting iMessage-enabled phones is poorly done. If your phone is stolen or you simply switch to a non-iPhone, your iMessages will be sent to the stolen or inactive device. Essentially, once you enable iMessages, it will exist until you explicitly disable it. Which isn’t great if you drop your phone in the pool. (Update: see the end of this post for a fix.)
I would be willing to accept these flaws, so long as iMessages were more reliable than SMS messages. Hell, I’d even be fine with them being less reliable, so long as the “Delivered” or “Failure” flags were 100% correct. Unfortunately, that is not the case. When iMessaging a friend, I was told that the message failed. I didn’t get a chance to resend, but five minutes later my friend responded to the message, indicating that she had gotten it. My iPhone still claimed it had never been sent.
OK, so sending a text and claiming it failed isn’t that bad. What would be really bad is if a “Delivered” text was never actually received. That happens too. All the time. I sent my dad an iMessage yesterday that he never received, even though my phone claimed that it had been delivered. He handed me his phone later that day to show that he never got it. I tried turning off wi-fi, data, killing the messages application, and restarting the phone, and was still unable to receive that text. That is unacceptable given the simple requirements of a messaging system.
Fortunately for me, my family has an unlimited SMS plan with AT&T. So until Apple gets its act together and becomes at least as reliable and honest as AT&T (This is a sad sentence to write), I’m turning off iMessages and dreaming of a day when phone messaging can be as good as AIM was in the 90’s.
Update: It seems that the duplicate contact issue might be a result of a user having an iPhone and another iOS device like an iPad. Since the iPad can’t receive SMS messages but can receive iMessages, the individual account is split into two separate contacts. This still doesn’t explain the basic message sending/receiving problems, however. (And it appears that I am not alone in that complaint.)
Update 2: Reddit user literroy describes how to disable iMessages without access to your phone.