In this short study, I’ll try to describe to you how we improved our process of taking absences at AppUnite. This is open-source project and you can find it here.
To be honest, the old way of taking absences at AppUnite was a clumsy, annoying, time-consuming and multi-staged process. We had to discuss absence face to face with a supervisor first, send official mail to the dedicated email address, including the reason and the period of absence and, after receiving an approval, we had to add an absence to the dedicated calendar. For us, a software development company, this process was error-prone and we had little control of it.
In the beginning, we have set specific goals when designing the solution: it has to be fast, simple and feel natural. We’ve started to think about how we can make the process better and we decided that building a chatbot that uses machine learning tools will be the best option that additionally would give us an opportunity to extend our knowledge of ML and chatbots.
We treated this as a side project, and we didn't want to spend too much time on creating it. We've decided to iterate fast and use some existing tools. The crucial part of any chatbot is Natural Language Processing (the process of taking input provided by users and extract meaning/context out of it). To solve this challenge, we’ve decided to use Dialogflow. Dialogflow is a simple but advanced tool that allows to capture and interpret human conversation. As a web framework, we've used pointfreeco/swift-web. It’s a nice, swift-lang web framework using functional approach.
We’ve defined 5 general categories of absence: • illness: you’re sick and you don’t plan to work at all, you’re are unavailable • holiday: you’re enjoying your free time, you’re are unavailable • school: you’re generally unavailable, excluding short breaks between lectures • conference: your availability is limited, excluding short breaks between lectures • remote: you’re on duty, but just out of office
To add an absence our team member simply starts a conversation with @AbsenceBot on Slack. All the chatbot does, is extract two pieces of information from the context: reason and period of your absence. If some pieces of information are missing, it will provide an additional question that helps it get this information.
Our team member starts to type and answer chatbot questions. He/She can also simply tell what they need, like in an ordinary human conversation e.g.:
- I’m not feeling good and will take time off till the end of the week,
- I’m going to a conference between 3-5 May.
When your request is ready (and after your verification), it’s posted on a dedicated private channel which all supervisors and PMs have an access to and can discuss in a small group a given employee’s absence using Slack threads. Those requests can be approved or rejected by tapping on the interactive buttons. Whenever accepted or rejected, an employee is informed about the status in a feedback message.
Accepted requests are added to our internal Google Calendar with a proper title (showing the name of arequester and the reason for an absence), the period of time and participants (an absence requester and an absence approver). Moreover, everyone in the company has a read-only access to this calendar, so everybody can see others’ absences in advance.
What we’ve learned
AbsenceBot has already been working on production since the end of February 2019. We feel that a simple chatbot improves our internal process of taking absence in AppUnite. It’s convenient, easy and natural for everyone.
We’ve tested a new functional web framework pointfreeco/swift-web. Building product with this library was a pleasant experience, but it feels slightly risky to use it on production for many reasons, like a small community or lack of tools. Nevertheless, we definitely see a lot of potential in and we love it!
We’ve learned how to use Dialogflow, which is a phenomenal tool. We can extract interesting information from chatbot conversation in an easy and convenient way. Dialogflow has an infinite amount of use cases and we plan to use it in our future projects.
AbsenceBot is open-source and you can find it here.