I've spent the past week using Matrix, and here are my general impressions so far.
Here's the areas which I feel I have enough experience to speak on.
I tried a few Linux desktop Matrix clients, including Fractal, Nheko, and Quaternion. None really stands up to the de-facto-official Riot web/desktop client (which runs on the desktop via the magic of Electron. It can have performance issues at times, but to be honest it's hard to tell whether that's the fault of the Riot application or of my server. Overall, I'd stick with Riot - though I did not try any of the command-line clients (chief among them is a script for WeeChat, a CLI IRC client). I intend to do so soon. I'll let you know how it goes.
I do wish there were more granularity with regard to notifications. Riot does have quite a bit:
off means no notifications,
on means popup notifications (which I regard as intrusive), and
noisy means an indicator on the tray icon as well as the popup (and a sound/vibe if you're on mobile). I'd like to see a more Slack-like option to set an indicator in a non-intrusive color but not have a popup notification. Riot could do better at presenting photo content too - photos stay pretty darn small, with lots of whitespace surrounding them:
It's not bad, but it could use a bit more polish.
I have a small Slack team with some siblings and friends in it, which we mostly use to share highly relevant news (read: internet memes). I would like to eventually migrate those users over to using Riot/Matrix, authenticated against my homeserver, but I don't want to do it all at once. I am testing the waters myself, and I have connected my Matrix homeserver with my Slack team via the Matrix-Appservice-Slack bridge. This bridge is a
virtual user type bridge, meaning it emulates the existence of each side's users on the other side. It uses Slack's incoming/outgoing webhooks in order to connect Slack rooms with Matrix rooms. If you register your instance as an app with Slack, and authorize the app in each of your connected channels, it can bring the avatars of the Slack users over to the Matrix side, as well as files uploaded to Slack (note that neither work in reverse). Without that, you only get text bridging. This bridge does not allow bridging of private channels or direct messages (since it works via the incoming/outgoing webhook integrations, which can't be set up for either of those). Lastly, Matrix doesn't implement any sort of a reaction system like Slack does, so you don't see those events. However, given those drawbacks, it's worked really well for integrating Matrix with my Slack team.
There is another bridge called Matrix-Puppet-Slack, which is a
simple puppeted bridge, meaning it logs into Slack as your user and sends/receives messages to your Matrix user using that access. It supports DMs and private channels, but will only work for one user per instance, and (from a discussion I had today in #bridges:matrix.org) will create a unique set of mirrored rooms on the Matrix side for each user. That's not bad if you're the only one intending to use Matrix, but if you're trying to migrate a small community it's a major drawback.
Matrix doesn't really have the idea of teams in the Slack sense. In Slack, a team has its own authentication zone and set of rooms, and you can't use your account from one Slack team on another (though they do support sharing channels between teams now). Matrix does have communities, which can be created on any homeserver (if the admin of that homeserver has turned on that permission for everyone - though there's really no reason not to). A community is a collection of rooms and users. There are no per-community permissions, so you can't directly map over the way Slack team members can access any public channels. In order to achieve this you can set
Allow anyone with the room link to join on all of your community rooms. Then the community page functions as a directory, and your community members are the only ones who can see it. The room links do remain sharable outside of that context though. Overall I don't think this is much of a drawback.
I've found the Matrix community to be very welcoming. If you're having issues with Matrix (e.g. deploying the homeserver), joining #matrix:matrix.org is a must. It's pretty active and the users are knowledgeable and friendly. When I misconfigured Synapse and couldn't get it to start, I dropped in and Matthew Hodgson, the project lead, helped me out. The same story goes for #bridges:matrix.org, which is dedicated to developing and deploying Matrix bridges.
This has been a solid experiment and I'm impressed with Matrix overall. I'm going to continue to use it, and since it's all open source, see if I can't contribute some smaller bugfixes for the places I find Riot lacking right now. Again, I'll keep you posted if anything interesting happens.