## Inspiration
I’ve been a long-time Slack user. In my previous life, before even remote became mainstream, it was normal to have dozens of Slack notifications across multiple channels. This was ok on some days, but when I was deep in writing product specs or other, I really wanted filters or ways to let people know that I’m focused right now — encouraging them to bug me later without expressly telling them to bug me later, as that would be socially awkward and work in itself.
Certainly, since COVID, some companies have become better at making Slack operate in a more asynchronous fashion but the reality is that a lot of work is hyper-collaborative and in certain roles, you need to be responsive and immediately available in Slack.
Fast-forward to Pulse. Pulse is a service that automates your calendar availability and work activity into Slack status. Our goal with this project was to build a way to automatically communicate when someone is in a focused work state into the Pulse app. By doing so, it’ll better set expectations for availability but also reduce interruptions. Many hack their calendar to do this with focus time but that’s fake. Real focus ebbs and flows; it’s not a predefined 3 hour block in your calendar as our brains don’t work like that.
## What it does
Pulse is a Slack add-on with an accompanying desktop application that automatically updates your Slack status based on your level of focus. It does this through a combination of heuristics, a model that examines keyboard and mouse activity, app switches and the types of apps in use, and historical data. It is not perfect but it continues to improve with more data. When Pulse determines that you are focused, it automatically updates your status in Slack to a lightning bolt. When you exit focus, it clears the status.
Privacy:
Pulse calculates when you’re focused entirely on the desktop and then communicates to our cloud to update your Slack status. We are not collecting any data about users time online, offline, in apps, etc.. Pulse is designed to be privacy-first.
## How we built it
We started by whiteboarding what were the various signals that might indicate someone was focused. We made a list that included things like app switches, keyboard activity, mouse activity, and more.
We then wrote down some simple rules. For example:
- If the user is rapidly switching among different apps, they are probably not focused.
- If the user is not typing, they are probably not focused.
We also considered other signals, like the time between clicks, whether on the keyboard or mouse, and what sort-of app it might be. It was important to keep it simple as this problem had a lot of risk of getting too complex without material improvement. With that codified, we made a set of heuristics to then try with the team.
We then proceeded to test Pulse with our own team and we ran into several challenges which we’ll describe below.
## Challenges we ran into
As mentioned above, we ran into a range of challenges:
- We quickly realized that focus really had 3 states. What are the heuristics that trigger entering focus? What are the heuristics that trigger maintaining focus? And finally, what are the heuristics that trigger losing focus? The default assumption was that this was all the same but that wasn’t necessarily the case. We ultimately improved this by enabling user settings where they can choose the level of “aggressiveness” in determining focus and behind the scenes, we tweak various heuristics.
- It was hard to tell what was right or expected. At some level, it was subjective. We had been trained to block focus in large 2-3 hour increments into the calendar. At the same time, we looked at the literature and there was plenty of research showing that over the past decades, our brains have become more adept at multitasking and that actual focus may only be seconds or minutes versus hours. We also were aware of an old accolade that said it can take 15-45 minutes to enter focus even though it could be lost in a second.
- We initially assumed that more continuous keyboard activity probably meant more focus but we then realized that there were an array of roles such as designers where most of their interaction was mouse clicks versus keyboard clicks. Similarly, one may need to switch through a range of apps because they are doing research while maybe preparing a slide deck. We made some changes to better account for this and we added some weights to specific types of apps that are likely to be more focus-oriented (eg document editing apps)
- We tried using a machine learning approach to focus detection but we did not have enough input data to outperform the heuristic approach.
## Accomplishments that we're proud of
Although it took some tweaking and testing, we are proud of a few things:
- We achieved a system that we feel internally is pretty good at representing when people are in focus and reflecting it into your status. It definitely changes some of our own understanding of focus in that real focus is in moments of time rather than longer blocks.
- We realized that we could achieve a reasonably good experience with a heuristics based model while also putting in place a system for improving a machine learning-based approach which will pay dividends over time.
- Most importantly, we are witnessing a change in behavior. When someone sees someone as focused, they are less likely to want to interrupt; instead they may decide to schedule their Slack message for a later time or choose to check back and message later. This is a positive development because our goal from the beginning was to reduce interruptions etc.
## What we learned
- We got more comfortable with Slack APIs but also API quotas that may affect us. Early in our testing, focus was going in and out resulting in a lot of Slack status API updates.
- We learned about the general science around focus time by both reading literature on focus and how the brain has adapted.
- We learned how to build a machine learning model, how to train it, how to tweak it and the associated stack)
## What's next for Pulse - Automatic Status
We started Pulse with a goal to automate status as it related to calendar and activity but realized that it can also be used to automate focus. We’ve been building more along this path and we’ve realized that status is more than just a fun, cool emoji but a way to communicate availability, provide empathy, express interests, and more.
The Pulse app was just approved on the Slack App Directory and we are now bringing our first real teams on board.
The other aspect we realized in building Pulse was that there is an opportunity to take all of this rich presence data and open it up into APIs. We can ingest new signals and bring it into Slack as a form of status whether it’s real-time app activity, the music you’re listening to, the steps you’ve walked, or when you’re out swimming. We can also take all of this rich status and presence information we have and publish it into other applications that may want to bring rich status and presence into their experience.



Log in or sign up for Devpost to join the conversation.