I've used Slack at 3-ish different companies.

Each company has different practices when it comes to Slack; and, as someone who has used Slack so much that it's mentioned about him at those companies (not always in a positive light?), I have a few thoughts and rules about the best Slack usage that I think help, in general.

1) At any not-small company, you're going to want to almost immediately change your Sidebar from "Everything" to "Unread and starred conversations".

2) Star all channels that you personally need to keep track of (or want to keep track of for a certain amount of time) and all people that you want to talk to or are currently in an important conversation with.

3) Unstar channels and people where #2 is no longer the case.

4) Create private channels for any conversation / project or issue that will ever require more than the people that are currently in a 'multi-person private message'. Archive them when the issue is over.

5) Use @here sparingly and @channel way more sparingly. If you're at a company that doesn't use @here / @channel sparingly, mute them for the channels that use them in excess. My current company has a meeting room shortage, so every single time a meeting room is freed up unexpectedly, there's an @here in one of our channels. That channel has @here notifications disabled.

6) If you can, in your broader "all the devs hang out here and can chat about work stuff" or "talk with ops here" channels, consider adding group aliases, so you can say, in those channels @ops, or @team-ops to notify just that group when things are important.

7) Use @here sparingly, yourself. Use it only for extreme situations.

8) Give chatty bots their own channel. Having the pull request bot for your dev team in the same channel as active development is going on, or in the same channel as other teams are supposed to come in to talk to you about a project your team is working on is just not the best.

9) Current, unproven experiment: at my current job, my team is experimenting with a heavy use of threads. Previously, we had multiple projects occurring concurrently and historical knowledge on features is spread across the team with a lot of new members, so we can't use the tricks of private channels per project to as much effect. Threads have a lot of weaknesses when it comes to readability and following; but, they do reduce the chances that someone's important message will get lost in a swarm of other messages on more pressing issues.

edit: Whoops, thought of more.

10) Use snippets for any bit of code even slightly long. I'm thinking like 7 lines or more. There's syntax highlighting, and they're collapsible, saving precious screen real-estate

11) Use Posts for large format messages you want to post to a channel or multiple channels. They have formatting, headers, and so on. They're also collapsible, again to save on screen real-estate.

12) Personal preference: try to not send multiple, short messages, unless that's your company's culture. It breaks up the conversation and makes it a bit hard to follow where a thread is, if you're using threads. For example, which message do you put the response on? The part where the situation got confusing? A random message in the middle? The last one? The first one?

edit 2, 3: more adding (I'll just add more after this and not say I'm adding more, if it happens again), and some removing some unnecessary information

13) Mute channels that you want to remain in, but don't want to be bothered by (maybe unmute @here and @mentions on this channel). This could include your company's random chatting channel, or the operations channel, or even your personal team's channel if you're currently heads down in a major project, but you might need to be pinged for something serious.