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.
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!
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 :)
hey @channel does anybody know how to find anna in slack?
Try searching in the search bar at the top of the window, and please don't post anything in #general
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.
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
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:
Trust us - if you have a lot of similarly named channels, people will get lost and ask questions in wrong places.
Hi! Can you please give me access to the CRM2?
Hi! All matters related to access and account roles are handled by #auth
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 :)
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.
Hi! Student ID-128118 didn't show up for the lesson. What should I do?
Hi! Student ID-128118 didn't show up for the lesson. What should I do?
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
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.
Hi! We have a new developer in our team, can you provision a staging server for them?
InfrabotJIRA ticket created - INFRA-18277. If the production server is down, don't wait, post in #dev-disaster
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
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.
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
What goals do we need to acheive in Q3?
SlackbotIt'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