Seven Deadly Slack Sins (And How to Solve Them with Automation)

George's Facegbougakov
July 8, 2020

This post was originally co-authored by me and the Skyeng developer relations team and posted in Russian on the Skyeng DevBlog. All names are fictional and any similarities to any person, living or dead, are purely coincidental, profile pictures are from Unsplash.

Looks like some offices will be staying remote until the end of the summer, or even permanently. That means that for some, Slack will become the center of all business processes and communications.

Character that looks like a Pacman runs around a maze where three ghosts say "Ask in #general", "Don't read the #FAQ" and "Tag @everyone"
Credit: Skyeng Design Team

We at Skyeng started building a remote team long before COVID-19 happened and probably ran into most of the issues of communicating remotely with colleagues and realized that we could solve most of them with bots, so we did!

Sin 1Asking dumb stuff and posting memes in #general

Have you ever accidentally hit “Reply All” on a company announcement sent to you and hundreds of your coworkers? If you did, that was probably a very fun and unforgettable experience :)

Before

Thread

#general

Slack Profile Picture

Mark Ackman

hey @channel does anybody know how to find anna in slack?

😡132
🤬127
1 reply
Slack Profile Picture

Ella Steward

Try searching in the search bar at the top of the window, and please don't post anything in #general

After

Thread

Shredderbot

Slack Profile Picture

Shredderbot

Hi, Mark! #general is only for important company-wide announcements. If you want to ask something, you can do it in #faq. If you beleive that your post is relevant to the whole company, hit the button below and we will review it.

Send to moderators
1 reply
Slack Profile Picture

Mark Ackman

oh ok

In Slack there’s a better version of this sin - post something irrelevant to most people in #general. Bonus points for tagging @channel.

And here you are, sitting peacefully, working away and hear a notification chime... “Surely, that’s something important” — you think, because you fine-tuned your notifications so that you get them only when someone DMs or mentions you. And then you see a completely irrelevant notification, get mad and put an angry emoji under the message.

We made a list of people that we trust to make relevant announcements, and for others we applied these moderation rules:

  • If you attempt to post in #general, our bot deletes the post instantly, so that people don’t get a notification
  • Our bot reminds what is the purpose of #general
  • If the author still thinks that their message is relevant, they can click a button and the message will be sent to a private channel for moderation
  • After that, a moderator from the internal communications team will review the message and either approve it or explain where is the best place for the message to be posted
⁉️

But where can people ask their questions?

In #faq, where volunteers from almost all teams help direct the questions to the right channel

Sin 2Not reading the pinned message

Cool, we’re done with #general! But there are still lots of channels with similar names. We, for example, have dozens of channels for each project with a prefix (usually the name of the project or the Jira project key) and a suffix (usually the name of the subteam)

Here’s an example - you found a bug in the mobile app and want to report it, so you hit Cmd+K and type in #mobile. Here’s what you see:

A Slack Quick Open menu showing many similarly-named Slack channels, all beginning with 'mobile'
More channels! (P.S. We now have a bot that automatically archives channels if they’re left dormant for more than 90 days)

Trust us - if you have a lot of similarly named channels, people will get lost and ask questions in wrong places.

Before

Thread

#crm

Slack Profile Picture

Floyd Warren

Hi! Can you please give me access to the CRM2?

1 reply
Slack Profile Picture

Ella Steward

Hi! All matters related to access and account roles are handled by #auth

After

Thread

#crm

Slack Profile Picture

Heybot

Hi! Welcome to #crm!

- Auth questions, role provisioning, etc. → #auth
- Report bugs → #crm-bugs

Other CRM2-related questions can be asked here

Before, we put a guide where to ask which question in the pinned message. Nobody reads it. Even the people who put stuff in the pinned message. And again, we solved this problem with a bot!

  • You add it to a channel
  • When someone joins a channel, the bot sends an ephemeral (“Only you can see this message”) message with all the relevant information
  • It only helps sometimes, but sometimes is better than never… I guess :)
Sin 3Asking questions that were already answered

We actually have a whole army of bots dedicated to solving this mess. Everything began with teachers - they, as contractors doing work for Skyeng, are granted limited access to our Slack so that they can talk directly with our support team. They even have a very detailed and always up-to-date wiki. It even has a special page where we explain how to handle “emergencies”, for example, when the video call cuts out.

Before

Thread

#teachers

Slack Profile Picture

Jack Dunn

Hi! Student ID-128118 didn't show up for the lesson. What should I do?

1 reply

After

Thread

#teachers

Slack Profile Picture

Jack Dunn

Hi! Student ID-128118 didn't show up for the lesson. What should I do?

1 reply

When an emergency happens, teachers panic. When teachers panic, they forget stuff and ask questions in their support channels.

We thought of a simple solution: integrate our wiki with Slack. When someone asks a question in a support channel, our bot takes the text, deletes “hellos” and “pleases” and puts it into the wiki search. After that, it just sends the top 5 articles and 90% of the time one of them answers the question

Sin 4Forgetting to move tasks to task trackers

At Skyeng, we have a channel where our infrastructure team can help you out with all of your IT questions. Most of the questions can be answered right then and there, but some require some work. And let’s be honest — unless you move that ticket to Jira, you will forget about it in about two hours.

Thread

#infra

Slack Profile Picture

Emelie Clark

Hi! We have a new developer in our team, can you provision a staging server for them?

2 replies
Slack Profile Picture

Infrabot

JIRA ticket created - INFRA-18277. If the production server is down, don't wait, post in #dev-disaster
Slack Profile Picture

Ella Steward

Hi! I've created staging-y352 and assigned it to your team. It should finish provisioning in about 10 minutes. If it is not available by then, ping me and I'll help you out.

Now we have a bot that automatically creates a ticket for every single message in support channels, then the support team can use reactions or the Jira UI to move tickets to other statuses or close them. Also, we automatically match the sender to their Jira profile and mark them as a reporter on the ticket, so that they can track it in Jira

We even have a bot that… supervises this bot (I know, that’s confusing, but hang in there) - it counts messages, who answered them and asks people to “rate the service”. All this data is collected in our data warehouse and is being used to continuously improve the support experience (that just sounded like a privacy policy, sorry)

Sin 5Spending unjustified amounts of time gathering and posting data from other systems

Every development team leader at Skyeng has an arsenal of bots that save them time (and money for the company). Here are some of them:

  • Burndown delivers daily sprint burndown charts to motivate developers
  • Arseny gathers data from Jira, reminds about pending code reviews and deploys and reminds people to log their time
  • Jake saves team leaders an hour a day by simplifying the process of selecting tasks for the next sprint. It automatically gathers all tickets with a specific status and sends a poll to the team channel. Then, team members vote on tickets they would like to discuss and Jake generates a plan for the team meeting so that the time is not wasted

Oh, and our email support team uses a bot that brings emails into Slack, so that our agents can easily consult with their leaders on specific cases and forward all relevant information to the designated teams.

Sin 6Not making sure that urgent messages reach their recipient
This bot can wake up our CTO

Stuff happens. Servers go down. Even at night. For emergencies and major outages we have a designated channel. We also use OpsGenie to automatically alert our DevOps team about any outages by paging calling them on their mobile phone.

  • If the on-call engineer doesn’t acknowledge the message within 30 seconds, our bot calls them via OpsGenie and tells them that everything is bad and asks them to press 1 if they acknowledged the alert.
  • If the on-call engineer doesn’t pick up or picks up and doesn’t press 1, the alert is immediately escalated to their team leader
  • If the team leader doesn’t pick up, rinse and repeat until you reach the CTO
Sin 7Making typos

Thread

#some-channel-idk

Slack Profile Picture

Emelie Clark

What goals do we need to acheive in Q3?

1 reply
Slack Profile Picture

Slackbot

It's not acheive, it's achieve!

When all communication in the company is text-based, you start to understand why you had to take that English class. Slackbot has a built-in function when it watches for keywords in messages and replies to them with a custom text message. With one Typeform and two hours we turned Slackbot into a Grammarnazi, but after a month people started asking us to disable it. It was fun while it lasted :)

And now that there’s a bot development team, everyone wants a bot

Most of the requests are actually for a really basic conversation tree - you start with one message, click one button - one message shows up, click the other - another one shows up and so on. We made a simple template for this scenario.

When someone wants a bot like that, we take their script, turn it into a JSON config file and the bot is ready!

P.S. And this is far from over. We have dozens of bots doing different things in our Slack. For example, we recently built one that turns links from annoying screenshot services into simple attachments