Slack as a backend
How we use Slack’s platform to run our remote company
We could not have built our company, Konsus, without Slack. We provide on-demand outsourcing for professionals, focusing on the six most common business outsourcing tasks, from small PowerPoint Design tasks to huge Data Entry projects. With around 1200 customers and a couple hundred projects of various sizes, we exchange thousands of messages with clients every day.
Using Slack, we realized we could streamline a large number of our company workflows with a combination of public Slack apps and custom-built integrations.
Combining Slack with Zapier, an automation tool, we’ve built tons of “Zaps” and Google Sheet integrations – and we’ve probably tested more bots than the Slack Fund itself.
The big win from all our Slack integrations is that we write fewer lines of code and build less tech to run our business. We can respond more quickly to Konsus customers by centralizing our business workflows in Slack.
“The big win from all our Slack integrations is that we write fewer lines of code and build less tech to run our business.”
In this article, we will share the top five ways we use Slack apps and internal integrations to streamline our company’s work.
1. Post client feedback to a public Slack channel
Whenever we complete a client project, we send an automated email asking the client how likely they are to recommend Konsus to a friend (a standard NPS scale). About 25% of our customers reply, and this is perhaps the most important signal we get about our customer happiness and our team performance.
Previously, we looked at this data in aggregate, focusing on the average score across all projects. We followed up in an ad-hoc way. It felt like we wasted this data trove of customer feedback: we wanted something decentralized and immediately actionable, allowing the project team to act on each single piece of feedback. Enter Slack.
Below: #client-feedback — every bit of client feedback is posted to a public Slack channel, where team members are tagged and respond immediately
How we do it
- Use Kloud.io to connect to the database where the scores are stored
- Create a Kloud.io ‘Report’ (a mySQL query) to retrieve the relevant data
- Import the data to Google Sheets via the Kloud.io Google Sheet add-on
- Use Zapier to connect Google Sheets with Slack: Set up a Zap that triggers on new rows of data in your sheet, format/code/calculate, and send a predefined message to a Slack channel or user containing the data from the database
You can read more about how to automate without coding using Kloud.io, Google Sheets and Zapier in our Beginner’s Guide To Business Automation.
2. DM relevant team members when a customer requests a new project
Whenever a new project comes in via our website, we want to quickly notify relevant team members so they can jump on it. Anyone familiar with Slack knows that it’s pretty easy to get bombarded with public channel notifications, which can slow down response times.
To get our team members’ attention on new projects, we set up a custom bot called @newproject. This bot sends a direct message (DM) to team members with the right skill set notifying them of the available project. Most team members have Slack push notifications on their phones enabled, and this is a simple way to send them push notifications without spending tons of time building it ourselves.
Using Slack as a shortcut, we now start almost all projects within approximately one hour. The DM is automatically deleted once the project has been picked up by a team member in our internal project management platform, so our team members do not act on outdated information.
“Using Slack as a shortcut, we now start almost all client projects within approximately one hour.”
How we do it
- We built a Slack integration to better handle sending and deleting direct messages to users in Slack by offering methods of managing entities (users, groups, channels) directly by their well-known IDs (e.g. the @newproject user), and not by their technical ID (randomly generated token).
- We accomplished this by storing all entities in a Redis cluster, indexed by both technical ID and well-known IDs, so that we can quickly find any object.
- Started with simple in-memory Maps to store them.
- Scaled to minimum two server nodes: we integrated Redisson to minimise the changes, and to easily connect to the Redis cluster.
- Now when a direct message is sent to a user, it’s tracked in our database so we know which messages to delete when the project is grabbed by a project manager. Feel free to leave a comment if you have some specific questions about this.
3. Create a new Slack channel when a new project is started
After a customer sends a project request and the necessary team is assigned, the project manager starts the project in our internal project management platform.
Another custom-made bot, @ops, creates a new private channel in Slack and invites the relevant team members. All the project communication is then carried out, and files are sent back and forth within the team until the project is completed.
How we do it
- When the project is started, a ProjectStartedEvent is sent to our messaging queue.
- The listener of this event will start asynchronously to process it. This improves the response time, because the PM doesn’t have to wait for the API calls to succeed in order to continue his or her work.
- The listener prepares the list of team members to be added to the channel, creates the channel, invites the users previously collected to it, and sets the channel topic and description. The topic contains the link to the appropriate INTERCOM conversation, and the description contains the link to the project’s page.
4. Add and remove team members from a channel
During a project, new team members are sometimes added, and old team members get removed once their work is done. Our project managers manage this manually in our project management platform.
In Slack, our custom @ops bot automatically adds or removes people from the project channels.
When a project is completed, we automatically remove all remaining team members from the project so that people can focus on their ongoing projects, and don’t get swamped by hundreds of inactive channels.
And when the project finishes, @ops sends a DM to participants with a peer review feedback form.
How we do it
- We implemented all the external interactions of our backend with remote APIs (like Slack, Freshbooks, Intercom) in an asynchronous pattern, so the whole user experience is as fast as possible.
- For example, when a project manager accepts a specialist quote, only the database operations are executed directly, and later (a couple of seconds, maximum) the specialist will be added to slack channel.
5. Stay updated on critical metrics with Statsbot
We find it valuable to have key data easily accessible, helping our team internalize the metrics by looking at it every day.
For simple reports on critical business data, few things are easier than simply asking Statsbot. Hooked up to our Mixpanel account through a pre-made integration, we can ask Statsbot everything we want!
How we do it
- Sign up for Statsbot and add Mixpanel as a data source. Other data sources include Google Analytics, SQL databases etc.
- Invite Statsbot to specific channels using the command “/invite @statsbot”
- Ask Statsbot for metrics using commands such as “@statsbot projects started this week”
Making Slack your backend
Operating hundreds of active projects takes a lot of tech and automation (and, of course, good old fashioned human sweat). We have built a lot ourselves, but without Slack, our company probably couldn’t be possible.
Everything has to be just perfect, from timely communications inside the business to conversations with prospects and customers. Delivering projects on time can mean the difference between success and failure. With Slack and the power of programmatic integrations, we’re able to handle our operations requirements in real time.
Our Slack integrations with Zapier, Kloud.io, and many others make it possible for us to take administrative action early and easily. The lines of code needed to accomplish all this has been vastly less than you would think…thanks to Slack.