I quite like Telegram, because I am apparently an old man at the age of 37, and I greatly prefer typing on my real physical keyboard, and not on my phone.

Telegram’s desktop client for Mac is great—it’s fast, it has feature parity with mobile clients, and it works. Messages get delivered and stay in sync, and I don’t need to somehow link my phone to my main machine via QR code to act as a gateway.

And if they introduced ads, with an option to pay a subscription to remove them? Here’s my…well, it’s Telegram, so here’s my cryptocurrency, I guess…but here’s my money.

Telegram's clients are amazing (including the ones developed by the community, such as telega.el for Emacs). It is miles ahead of any other messenger in the UX department. Friends of mine who have (reluctantly, in some cases) tried it out quickly got stuck because of this single point.

The other thing it's got going for it is that its protocol is designed to work in low-bandwidth environments. Yeah, the protocol looks crazy - but it really does work. Imagine being on an underground train and only occasionally getting a few seconds of internet while passing a stop: Most messengers will at most start showing you a "Connecting ..." status, Telegram will do a full state sync (minus media files, of course) in the same time.

Telegram actually provides a fully featured C++ library you can just include - it has a pretty good API that does most of the complex things for you.

You just register callbacks for message lists / chat messages and notifications and you're all set.

This allows people to easily build full-featured clients for pretty much any platform and it makes it easy for everyone to keep up. Very smart platform design.

I'm very disappointed that something made to be more open like Signal completely failed in this aspect and has ended being a walled garden with poor quality clients.

Exactly, Signal creator is actively against 3rd party clients, because they use his infrastructure for free:

https://github.com/LibreSignal/LibreSignal/issues/37#issueco...

The issue was branding, not bandwidth. There’re 3rd party clients:

https://github.com/mollyim/mollyim-android