IMHO the problem with Matrix is federation. I think adoption would be far better if there was just a single, open source, global, decentralized Matrix network. Users don't want to have to run their own servers and have to figure out which network of servers to join. If a user downloads a client app to their phone they expect to be able to then connect to THE network.
As long as the code is open source, then there is always an out to create a new network, but why do that before it is actually necessary? (Basically federation is just a form of premature optimization) Communication networks should be like git repos. We should all be working in the same repo, but if sh*t hits the fan, then fork it and carry on with business.