- Matrix: the absolutely bonkers state resolution algorithm that's so complex that mathematical notation comes out. No socket support, only HTTP long polling.
- XMPP: no packetization whatsoever, just two endless XML streams. Users can hide their real JIDs in chats for some reason.
- MTProto: once you've figured out the docs written by Nikolay Durov (no small feat!), you realize that chat rooms come in two flavors. Also the "TL" binary serialization is properly weird sometimes. There's a protocol message acknowledgement mechanism on top of TCP. Sometimes you receive "updates" (events) out of the blue, sometimes you have to ask for them, sometimes API calls return them.