I travel home from work on the London underground, the Metropolitan line to be precise, which not underground all the way, there are various points along the way where you can get phone reception. Quite often I am using my phone to let my wife know how far from home I am. Sometimes she is also on the same journey home, so at any one time either or both of us could be underground.
We used to use SMS messages to communicate, but if you don't have reception when the other person sends you a message, you don't get the message as soon as you get reception. The impression I get is the network provider attempts to resend the message, but often on a fairly long interval. As you can imagine, that is pretty useless.
Next we moved to using email, which actually works quite well. The sender knows it is sent, and the receiver can get the message as soon as they have reception. This seems good, but there are two relatively minor downsides. Firstly, email is a bit heavy weight for a short conversation - the iPhone Messages app gives you a nice conversation view, but with email you are building up a message that gets bigger each time due to the quoted text. Secondly, I don't usually have 'push' email on due to battery life.
So, when iMessage first came along I thought it would have the best of both SMS and Email worlds. Sadly it is actually worse than both. It seems to me that when you send an iMessage the communication is between the two iPhones rather than going via a server. Obviously it goes via a server in terms of network, but that is more routing than anything else - it doesn't seem to go to the equivalent of a mail server. This means both iPhones have to have reception at the same time. There's a fallback to sending an SMS, which seems to kick in sometimes, a bit randomly. It wouldn't be so bad if the device let you know what was happening - but what actually happens is not really that deterministic. It lets you think you have sent a message, when it hasn't, if you are lucky you might get a failure 20 minutes later. Sometimes sending a new message will flush through the previous 3 that you didn't know hadn't been successful. Sometimes you will never get a failure, but the recipient never gets it. When I get home I can check my wife's iPhone and it can look like a totally different conversation, messages missed, different order. It really is totally unreliable.
I conclude that Email is still the best form of communication for this kind of scenario - the sender and receiver are completely decoupled and the message immediately available (push or pull) to the recipient when they have reception.
So, Apple, why does iMessage suck so much?