How we fight Covid-19 at the office with Rails

Stephan Eberle
7 min readDec 9, 2020

When the pandemic hit early this year it was almost certain that we needed to close the office. With a company of ~1800 people in multiple office buildings around Europe there was only question of when we were affected, not if, and how to react and move forward.

When the first case of a Covid-19 positive co-worker was registered in our Hamburg office we immediately closed down our location and started working from home. Everyone was now affected by the office not being available as a place to work, collaborate or meet colleagues. You can read more about this switch from my colleague Björn Rochel.

While I was in a lucky position to have a spare room to myself as a home office a lot of colleagues were not that fortunate and again others did not want to be alone the whole day in their apartment and preferred to have face-2-face contacts. So the thought of how to make the offices available to our colleagues in the safest way possible was born.

Luckily we already use a tool called the XING Locator: Think of it like Google Maps, but indoors. It provides a floor plan for almost all our office locations (Hamburg, Vienna, Munich, Barcelona, Porto, …) and all the floors are prepared in a way that makes it possible for every colleague to find their physical desk on the map and “claim” it to be theirs and thus telling everyone else where to be found.
The tool also covers coffee makers (really important), conference rooms and soccer tables (also kind of important), utility rooms and showers, rest rooms, … you get the point. You can find out more about its early days by reading this article from my Locator co-creator Jan Habermann .

The 4th floor of our Metropolis office in Hamburg (part of it) as shown in the Locator

As the pandemic became more and more one of the deciding factors of our lives we needed to adhere to certain rules: Keeping distance to each other (aka “social distancing”), wearing masks indoors, regularly wash hands and open windows (“Lüften” is a form of art).

As the core of the Locator basically is a GIS application, the “distancing” is something we thought we could take care of.

The first measure that was defined was to make it mandatory for every employee wanting to use the office to claim their desk in the morning.
We helped a bit by auto-clearing all desks every night, because until then you could claim your desk and it would stay yours for as long as you did not „un-claim” it (or someone else removed your claim for housekeeping). This way we would know the claims were legit and people were actually at the office on a specific date.

By disabling desk-claiming for specific desks we can ensure minimum distances between colleagues as shown.

As we only stored the active claims in the database we needed to add some history to enable contact tracing in retrospective (as you only know five to six — and up to 14 — days later that you’re Covid-19 positive).

The timeline is available for “admin” users so one can see the current “load” of each location.

This history enables us to see backwards in time to know who might be affected in case an employee was diagnosed positive. For every claim we store desk, user and date. Every employee can also access their own data by visiting their user profile.

With a little bit of PostGIS Kung-Fu we can also get nearby desks (1.5 meters in this example)

The Robert Koch Institut (RKI), which is the top governmental health organization in Germany currently defines two affected groups: The close-contact group are people who were within 1.5m of an infected person and the others further away.
By using the above code we can get the colleagues of the close-contact group (<1.5m). Of course this is all under ideal conditions. We’re humans, so we move around and talk, and forget things.
Also some colleagues still sometimes forget to claim a desk so there’s always missing data and all the software can do is only provide a first set of people to talk to or to provide a list of contact persons to check for validity.

As you might have gathered by the fact that the shown code above is not presented by a nice UI, we thankfully did not need to use that function on a weekly basis.

So what now?

As the world gets used to the virus for now and a vaccine might become generally available by summer next year we need a way forward. Until now and for the foreseeable future our offices stay open for voluntary use yet with every month passing a lot of colleagues want to get back to what they know and what feels “normal”, so we need to find a good way to support a safe working environment in the office without letting it get crowded.

In order to make using the office more productive by working with the right people face-to-face or using the right rooms/utilities we added an on-site-planner to the Locator.

This combined with everyone usually belonging to a team which in turn uses one coherent part of the building (=teamspace) we can make plans for the future.

Showing occupancy information about a teamspace

While we do not have line information (ie. who works in what team and who is the manager etc.) in the Locator, we have areas tagged as teamspace, therefore we can find the desks of a teamspace like this:

Getting all the desks within a teamspace area

So if you now tell the Locator what teamspace you work in, the Locator in turn can provide a simple calendar of who wants to use the teamspace in the coming days:

Your teams plan on using the teamspace

This enables more transparency on planned office use and at the same time crowds at the office can be avoided. This is vital now during the pandemic and at least nice afterwards when the 50% mobile office regulation is established.

There are numerous ideas in my mind on how to enhance the software in the future (incorporating Slack for plan digests etc.), but these pandemic-related changes really are coming from the bottom of my heart as I am no doctor or health care professional. I am merely working from my basement since March and this way I can at least do a tiny little thing to make working a little safer.

Thank you for reading! If you have questions or suggestions please do not hesitate to use the comments. I would really like to know if you address the pandemic in a similar way or how you do it in general.

What about Rails?

Of course you read “Rails” in the title of this article so here are my thoughts on that as well: We started the Locator using Ruby On Rails and Leaflet.js in October 2016 and I can’t really complain: the code base looks like it evolved over time and there is always room for improvement, but after four years with only a couple of weeks of working on it every year, it was still not very time-consuming to implement the changes needed to address our needs during the pandemic and I have to say that is always a joyful ride to dive into the code and see how easy one can get some new idea implemented or checked out.

We’re still using Ruby On Rails, but now a sprockets-only version 6.x (yes, no Webpacker) with PostGIS as database while the front end is built with Rails templates, Leaflet.js and lots of Coffeescript.

The XING Locator is an internal tool and not a SaaS offering at this time.

Disclaimer: The images and user/employee names used in the images above are fictional and were auto-generated using https://randomuser.me, so the images are from real awesome users who provided their “faces” for these kinds of things, but the names are fake. The feature photo was made by kate.sade on Unsplash.

It took me an unusual long time to piece this together as I am currently running a cold so please forgive me if you find typos or unsound claims. I would welcome you pointing them out so I can fix it. Thank you!

--

--