Synapse is simply awful as a server implementation, and the clients are just simply bloated.
But if you are looking for a good federated, self hosted, and encrypted chat solution, for my own private chat system; I've gone back to XMPP - I've settled on:
* ejabberd (which is in Erlang so just by definition is going to perform leagues better than Python) - prosody also works fine (especially for "lower end" servers) - though both need a bit of configuration at first install
* conversations.im on my Android phone
* dino.im on my desktop (which recently added calling capabilities back to phones: https://fosstodon.org/@dino/106228549009869402 )
* (if you're on a Windows desktop): gajim.org is still making releases and works (including E2EE)
I do not know of a good iOS client for XMPP right now, but these three fully support OMEMO for E2EE and I've had no issues talking to others on them.
Synapse is fine until someone on the homeserver starts joining a bunch of rooms, then you'd better have a lot of RAM for it.
And Element, while a perfectly good client, is the standard "bloated electron app" option that chews 700MB of RAM and lags, entering text, on a Raspberry Pi 4.
There are alternatives, but they tend to have weird issues, at least last time I messed with them, in how they handle some of the corner cases of encryption.