E2EE is genuinely hard to implement in the context of a chat service with server-side chat history, large (10k+ user) group chats, and multiple clients (including web applications).
I'd flip that around and say that server-side chat history, large group chats and multiple clients are hard to implement in the context of an E2EE chat service. What I mean by that is: E2EE is a necessity, not some nice-to-have feature.
Building a chat service with server-side chat history but without E2EE is like building a car with very nice headlights that doesn't actually move.
Signal chat history is client-side. You have to explicitly "back up" and "restore" messages to move to a new device, and if you lose your phone, your chat history is gone forever.
Building a chat service with server-side chat history but without E2EE is like building a car with very nice headlights that doesn't actually move.