How we built a smart meeting assistant that saves our company hundreds of hours every month

Björn Baltbardis
New Work HackWeek
Published in
7 min readNov 5, 2018
The Meeting Assistant suggests you lucrative opportunities for a meeting with your participants and a room in almost no time

Setting up a meeting can be painful. At least that’s the feeling we and many of our colleagues had on an almost daily basis.

It doesn’t just involve finding a free spot where every participant is available. It’s also about grabbing a room for that particular point in time. This has become a growing challenge in a fast-growing knowledge worker organisation like XING.

In our opinion, existing tools like Outlook do not fulfill this task satisfactorily. Luckily, a XING HackWeek was just around the corner. In this article, we’d like to share what we’ve been building during that week and how our scheduling algorithm works behind the scenes.

What is a Hackweek?
“At XING, we want to give employees the freedom to develop ideas without any limitations and explore new territories and technologies. That’s why we established a quarterly Hackweek where developers, product managers and UX lay down their daily work for five days in order to put their skills up for creative projects.”

Our concept

We wanted a one-stop shop solution for scheduling a meeting without wasting hours on matching participant calendars with room availabilities.

Our new tool — the Meeting Assistant —was to be configured with constraints and participants to deliver the best-possible time/room constellations where everyone is available.

It does smart sorting of these suggestions and does, therefore, ensure that you always see the next best options for your intended meeting:

  • Closest time slot where every participant, as well as a room, is available
  • Closest room suggestion (by distance) preventing you from walking through the whole building

Finally, the Meetings Assistant does allow you to make a booking directly like you are used to create your invites from other tools.

What’s the expected business impact?

That’s hard to estimate, but let’s give it a try: We guess one out of four XING employees schedules meetings on a regular basis. Let’s assume three meetings per week which take around 10 minutes per booking. We think the assistant reduces scheduling times by at least 50%. Based on ~1,500 employees, we can do a (somewhat conservative) calculation:

(0.25 * 1,500) employees * 3 meetings * 4.35 weeks per month * 10 mins * 50%
= ~ 400 working-hours saved every month 🎉

This is a nice aspect, but we think the real value is the smile on our colleagues’ faces who can arrange meetings in next to no time!👩‍💼👨‍💼🙌

The user interface

The UI frontend was built according to the Sketch draft and based on Bootstrap 4 + jQuery. It had to render three essential tasks for the user:

  1. Enter participants and constraints
  2. Pick a suggestion
  3. Send out a meeting invitation

Let’s see what the workflow looks like:

Enter participants and constraints

Get-A-Room Meeting Assistant — Step 1

First of all, users need to enter who they are and where they sit. This information is saved to the local browser storage. As we’ll see later on, the algorithm uses the seating information to sort rooms while the username is used to save the booking to their calendar and invite participants.

The next step is to enter all participants. Luckily, we provide our users with an auto-completion of all colleague names via our internal LDAP API.

In addition, users need to specify the meeting duration and whether they need a room, in which locations and floors to search for a room, and whether the room is supposed to have seats and video conferencing hardware. Then the person’s working hours can be defined and a specific time blocked for lunch. The user can also change the default lookup period of 14 days.

Once everything is ready to go here, the user can go ahead and run a search.

We’ve got some matches — pick a suggestion

Get-A-Room Meeting Assistant — Step 2

Users are presented with available slots, i.e. a list of time/room combinations grouped by starting time. Users can then pick a time and change the default room, e.g. if they’d prefer a bigger room that is further away.

Selecting a time/room combination updates the timeline view below. This brings additional value to users as they’ll be able to see if other participants have any meetings around the suggestions, giving them an opportunity to try to find another slot that is less stressful for other attendees.

Send out a meeting invitation

Get-A-Room Meeting Assistant — Step 3

Now, users can enter a meeting title along with their exchange password and a rich text description for the invitation. Clicking on “Book me a meeting!” saves the meeting to the user’s calendar and invites all participants. Done! 🎉

The algorithm behind the scenes

What happens in the background? The scheduling problem is a known issue in computer science, and there are many theoretical concepts and practical implementations for this issue. As time was limited, we decided to adopt a naive approach which is probably not ideal regarding memory consumption and efficiency, but it still worked out pretty well. Let’s have a look at how it works:

Create a timeline

We decided to start with an internal object representation called timeline. A timeline represents the whole time we want to be able to search for a meeting spot.

The timeline is separated into many small intervals called ticks, while the size of these intervals is known as resolution. The meeting assistant works with a default resolution of 5 minutes and a lookup period of 14 days. So for every 5 minutes within the lookup period of 14 days, there is an array element in this timeline that retains the state for this 5-minute-interval aka tick. Possible states are free, busy, tentative and out of office.
For simplicity reasons, the lookup period in this example is two days while the resolution is one hour.

Add non-working hours as ‘busy’

The next step is to block non-working hours in our timeline to make sure we don’t receive any meeting suggestions outside of our working hours:

Add busy times for all participants

Now it’s time to make sure we know about the availability of all participants for the whole lookup time. We fetch this data via the Microsoft Exchange SOAP API of our organisation. The algorithm loops through all the participants and merges their availability into a single timeline:

This results in a single timeline that respects every participant’s meeting. Free spots in the timeline are therefore lucrative opportunities for a meeting.

Overlay room availabilities

Now we can easily identify when everyone is available, but we don’t have a room yet. The next step is to loop through all the rooms matching our filter criteria. Here, we’ll create a copy of the timeline above and add existing meetings for a given room as busy times.

The outcome of this is a timeline displaying both participant and room availabilities for each room.

Identify candidates

Next, we loop through the timelines and search for free slots covering at least our required meeting duration.

We then save these candidates to a list that is subject to some post-processing:

Sorting the suggestions

To provide the best value based on the data the algorithm collected, we apply some post-processing:

Post-processing of meeting suggestions
  1. Group time/room candidates by starting time
  2. Order grouped time values in an ascending order
  3. Rank down similar suggestions:
    Given the resolution of 5 minutes, we see overlapping suggestions, e.g. for starting times at 11:00, 11:05, 11:10, etc. Such suggestions are of little relevance to our users, which is why we sort such entries to the end of our suggestion list and keep the first one in its original position.
  4. Order room suggestions by the distance from the user’s desk

We deliver up to 18 suggestions to the user, but only the first 6 are shown by default.

What’s next?

In our next HackWeek, we’d like to continue working on the assistant as we’ve received lots of positive feedback and ideas for improvement. This is what’s at the top of our list of things to do:

  • The ability to make participants optional
  • Adding internal mailing lists to avoid typing in all participants manually
  • Support for setting up recurring meetings:
    Setting up recurring meetings in a room is the next big pain requiring a simple solution. It’s currently really hard to set up a meeting with a room that’s available for every occurrence. That’s why you’ll need to manually search for a room alternative for every occurrence where the original room is not available. We want the assistant to streamline this process!

Have you come across the meeting room issue, too? What’s the situation like in your organisation? What do you think about our concept? What features should we add to make it even better?

Let us know your ideas💡

--

--