Modernizing Fellow’s Slack app

The bot that grew up and moved home

Samuel Cormier-Iijima
Slack Platform Blog
4 min readDec 18, 2019

--

Illustration and design by Matt Emond.

At Fellow, we recently updated our Slack app, transitioning from a conversational bot to a more robust app experience. This was possible by implementing two newly released Slack platform features:

  • The app home tab — an interactive app surface that you can customize to display information, instructions, and more for each unique user
  • Modals — another interactive surface that enables more advanced workflows for apps in Slack

In this article, we’ll focus on how to build for the app home tab, including lessons learned and actionable takeaways.

About Fellow’s app on Slack

The idea for Fellow started with a Slack-native chatbot that helped companies build and maintain a culture of continuous feedback. Partnering with the People team at Shopify, we created a Slack app that encouraged employees to request feedback through gentle and timely reminders.

Using Fellow’s app on Slack to ask for feedback about a recent interaction in (circa 2017).

Collecting product feedback, we realized there’s so much more to great work relationships and management culture. Our mission grew to help managers and companies adopt best practices — like holding regular 1on1s, tracking goals, and efficiently running inclusive team meetings. Fellow had evolved into a full web-based application, but our friendly Slack bot had been left behind.

Adopting new Slack features

Slack’s latest platform features inspired us to update our Slack app to be much more intuitive for our users — especially the new home tab.

Our shiny, new app home tab shows starred notes, important upcoming meetings, and recent activity on Fellow.

We’re excited about the home tab as a way of making Fellow even simpler to use. Fellow now puts the most important information in a single, quickly-accessible place. Before, direct message were the only way we could interact with people in Slack. Leading to more (possibly unwanted) notifications that were lost in the continuous stream of conversation.

While useful for specific interactions, chat is not the most natural or efficient way to accomplish everything. In 2016, chatbots were making a big splash, and it seemed that chatting with robots was the way of the future. While this may feel natural in conversation, other UX paradigms are often more efficient, practical, and user-friendly. For example, it feels strange to type “what meetings do I have today?” to see today’s calendar. The home tab freed us from the restrictions of an infinitely scrolling conversation.

An unexpected benefit? We’ve reduced our Slack app’s code, no longer needing the subtleties of chat-based UX. Fellow was built before mature NLP frameworks, so we designed our own system for dealing with chat state. This took the shape of a complex state machine — tasked with tracking user conversation, pausing notifications mid-dialogue, and expiring interaction if the user ghosted: 👻

By implementing the latest Slack platform features, we were able to do a significant code cleanup: 🧹

Building for the app home tab 🏠

So how do you actually get started? First and foremost, the app needs to start by responding to the app_home_opened event, which Slack sends each time a user clicks on your app in the sidebar. How you respond to this event is up to you — we check our database for a matching user, and if we notice that they haven’t gone through our onboarding yet, we’ll show them a welcome message with information about Fellow:

Handling the app_home_opened event in Python.
Handling the app_home_opened event in Python. This uses our internal wrapper for Slack’s API, but you can use similar code using the official Python client.

Once the user has configured their Fellow account, we display the most relevant information for each unique user with Block Kit, Slack’s app UI framework. Some of the information (like upcoming meeting times) is time-dependent. To ensure that this is always up-to-date, we schedule background tasks to push content to the home tab — otherwise, the user would see outdated information when clicking on the tab.

Creating richer app interactions

Slack’s app home tab completely changes the way people interact with apps, and if you are building an app for Slack, it’s easy to adopt this feature. Instead of the upfront investment of creating a dialog-based chatbot, you can release a fully functioning app more quickly. We rebuilt our Slack app within weeks of hearing the product announcement — and mostly spent that time debating layout, because there are so many possibilities with Block Kit! By building an app home, you can create more powerful interactivity for your app and a richer experience for your users.

Check out the Fellow app in the Slack App Directory. Questions, comments, or feedback? Send a message to support@fellow.co or tweet @fellowapp.

--

--

Samuel Cormier-Iijima
Slack Platform Blog

Co-founder and CTO @ Fellow. Formerly eng manager at SurveyMonkey. Interested in Rust, Python, web technology, cryptography, and music.