In just a few short years, Slack has gone on to become an indispensable work tool in our always on often mobile work life. A big part of the workflow improvements they offer is the fine grained control on notifications you receive from them. Not only can you choose to be notified on email, desktop and mobile, you can  also set a notification schedule and adjust interval between getting the same notification on the desktop and on your mobile.

This is a complex problem to solve engineering wise. A few years back, Slack shared the flowchart of how they decide to notify you. Let's dissect that flowchart in this article.

Channel Notifications

You can be notified for messages on the channels you are part of, unless you mute a channel.

That's the first thing Slack checks in their flowchart.  

Check if the user has muted the channel

Do not disturb (DnD)

The next thing they check is if the user has enabled DnD. Users  can enable it at any time or setup a schedule to toggle DnD automatically.

Slack users can mute their notifications

However, Slack also offers the sender an option to override your DnD setting, thereby resulting in the next section of the Flowchart

Check if the user has setup DnD and if the send overrode DnD

If you are not in DnD or if DnD was ignored by the sender, Slack checks if this message is in fact a @channel, @everyone or @here mention and if you have disabled notifications for those (for this channel).

You can stop @channel/@here from being mentions for you

This is checked in the next part of the flowchart

Check what kind of mention this is and if it should create a notification

Notice the part about this message being part of a thread? Slack let's you set a global preference for notifying you of replies to threads

A global preference for replies in threads you are following

However, it's interesting to that even if this setting is turned on but you have disabled notifications entirely for the channel, you won't get notified. See this part of the Flowchart (the leftmost branch leads you to the big RED NO).

The channel preference overrides the global thread notification preference

Mobile specific notification preferences

Before we go on any further, let us talk about Slacks ability to let you setup a different preference for mobile notifications. They allow you to do this globally, as well as per channel. It looks something like this

Assuming that the notification candidate has made it so far (and so have you!), Slack  checks for mobile specific notification preference for this channel. If none has been setup, they check if you have a preference globally.

Check if a mobile specific notification preference exists for this channel or globally

If you have chosen to not be notified of anything, it's a straight line to the big RED NO. However, if you have chosen to be notified, based on your preferences, you may lead down to the big GREEN YES. However, you may reach here on the desktop or on the mobile. In the Flowchart they talk about checking for "past mobile push timing threshold" but I wasn't able to find this as an option in their UI. Perhaps this is something check for in their backend without it being a user adjustable property.

As you can see, building a sophisticated notification system is fairly complex. It doesn't have to be. MagicBell can take care of all of this for you while you focus on the core functionality of your product.