Since we have 5 floors across two buildings, I was lulled into a sense of familiarity with my coworkers. I saw very few strangers, so figured I had been here long enough to recognize everybody. Enter the holiday party.
At our holiday party, I recognized fewer than 25% of the people there. Granted, quite a few of them were SOs, but I realized that I'd love to know more of my coworkers, at least on a first name basis.
To address this, we have an opt-in program that chooses 5-6 people to go to lunch together monthly, however, the queue is growing and growing. Incidentally, I was chosen once in my first 8 months, and between two groups of 6, 7 people dropped out the week of. We combined the two groups into one group of 5, but that final group contained two people I work closely with (I literally sit next to one of them). That may say something about our priorities (or workload), but I won't read into that. Needless to say, it hasn't been the most effective for me personally.
While group lunch is a good option, it requires a longer time committment for any event, costs some $$ per head, and often is dominated by the more outspoken people, preventing me from learning about the quiter ones.
Thankfully, we have a coffee bar in-office, where I often bump into people I know. I originally thought that I would reach out randomly to one person each week, but realized that they might not want that, and enjoyed the opt-in system. However, 30 minute coffee chats seemed to fulfill my time requirements, provide 1-on-1 interaction, and were already provided by the office, so would not be a financial drain on it or me.
The solution was simple: build an opt-in list that randomly pairs people each week. However, the implementation was a little trickier. I didn't want to be the holder of an excel list, nor did I want to have to remember to run it every Monday. I thought briefly about building it as a web form, but realized that the harder it is to join, the more people would drop out. Thankfully, we already had an authenticated system that is often used for social communication. Enter Slack.
I have a tiny bit of history with Slack slash commands, having built a bot once before (it anonymized comments to a channel), but had little to no ability to spin up a server that could accept webhooks and do the processing. I had used Heroku the last time, but it had a bit too much overhead/set up cost.
Thankfully, Google Apps Script has a built-in ability to parse incoming GET requests. I set up a very simple slash command that merely forwarded on the text of the message (as well as username), and if the script received text of "join", it would add that username and a timestamp to a google sheet (which is serving as my database). Same setup for "leave", which adds a "deactivation timestamp" to whomever wants to leave.
Ironically, the easiest implementation of rejoining is simply to erase the deactivation timestamp, which is a nuance that caused me days of trouble as we use a similar method for our member list at work. Having had to think through what would be required to "properly" construct a de-/re-activation framework, I now have a lot more sympathy for whomever designed ours.
Every week, the script randomizes the order of the array (removing the last person to join if there is an odd number), and simply pastes it into a #coffeegrinder Slack channel, leaving the logistics up to each pair. So far it's received rave reviews, and I plan on a company-wide launch in early 2017.
I have a few ideas on what to build into it next, but will wait for a widespread launch to see if any of the potential problems arise (e.g., people matched together too often, people not meeting). For now, it's a wait and see approach.
- Allow people to set a frequency (e.g., every 2 weeks)
- Incorporate weekly feedback to see if everybody is matching up (and potentially remove people who don't follow through)
- Propose a time/send a calendar invite to both people
- Add logic to disallow repeats of recent matches