Melvin Koh

Software Engineer. Pythonista, JavaScripter. Find me on Twitter @melvinkcx2 😁

We bridged the gap between Slack and in-house management without paying the hefty cost

Originally published on melvinkoh.me
Slack has become the ultimate communication tool in many organization. With its wide array of APIs, it opens endless possibilities and room for creativity in terms of expanding the use of Slack.
In the organization I'm currently working for, a lot of conversation, both important and casual happened on Slack. To us, it is a problem when all kinds of messages are buried deep in the channel and is especially annoying when we couldn't search through messages beyond the 10k limit for free plan.
We want to keep track of remarks of team members we made on Slack without having to search through all messages. For this very purpose, I decided to give birth to a new baby -  Profile Management Tool into our family of in-house management tool.
What our Profile Management Tool does are essentially three things:
  • monitors and stores a copy of Slack messages of our channels of interest;
  • prompts message authors to tag users if necessary;
  • provides interface for retrieving messages/remarks.

The end product?

When a staff make a remark by hash tagging a team, the system prompts the message author if he/she is referring to someone.
Once the author selected users, the system associates the users with the message. (aka tag users to message)
When we navigate to our management portal, we can view a list of remarks we made to a particular staff.
Cool! isn’t it?

How Slack and our system integrated?

In this interaction diagram, I briefly show how the integration between Slack and our in-house tool was done.
(Simplified interaction diagram)

FAQs - Why did you do this? Why did you do that?

Q: Isn't this overkill just to make remarks of individuals?
A: Since most of our conversations happen on Slack, integration with Slack means none of us has to pick up and get used to using another system. Besides, team information are readily available in our management tool, it is unnecessary to prepare any data purposely. too much work
Q: Is this really a cost effective solution?
A: Considering the scale of the company we have, paying ~$7 per head per month just to be able to search through messages isn't a sensible solution. On the contrary, this new tool was built with proper test suite by a single engineer in a short period of time. Besides human cost, we barely spend anything as we are simply expanding our in-house management tool with a new module.
Q: Why do you keep a copy of all messages? Isn't that redundant?
A: As I mentioned, Slack doesn't allow us to access messages beyond the 10k limit unless we pay ~$7 for every single person per month. Since we need access to all historical messages. Storing messages in our own database is actually way cheaper.
Q: Your system heavily relied on Slack Webhook, don't you worry about their SLA?
A: Slack promised graceful retries within the window of 5 minutes. We put our trust on them. Hopefully they won't fail us.
Q: The UX sucks! Users have to press "Done/None" to end the bot interaction.
A: Totally agree, and this is because Slack doesn't have a multi-select Block. We did suggested Slack to add such elements, until they do, this is the workaround we came up with.
Q: What if your users refuse to react after hash tagging? Won't the bot message be there forever?
A: Nope, the interactive message our system triggers in ephemeral and only visible to the message author. After a certain period of time, unresolved interactive bot messages will be automatically removed by Slack.
Q: How would you rate the development experience of integrating with Slack?
A: I would personally rate a 4 over 5, since we can use their Node SDK given our server app is built with an Express-based framework.

Final Words

Our use case might be very specific. While writing this, I did struggle deciding not to go for a detailed tutorial. If you think a tutorial of building a similar solution would be more helpful, free free to leave a comment. Any feedback is largely welcome as well.

Tags

More by Melvin Koh

Integrate Google Calendar
Git
Python
Nodejs
Firebase
Memory Improvement
Bitbucket
Javascript
Python
Nodejs
Firebase
Postgres
Productivity
Programming
Python
Microservices
Facebook
Javascript
Django
Django
Firestore
Javascript
Vuejs
Jwt
Topics of interest