Blog

Finding When.works

A little over a year ago, I started on a small side project to help solve a simple problem: how do you cut down the friction around finding times to have a meeting? For internal meetings, where everyone has shared calendars, it’s an easy enough prospect; just take a look at Google Calendars with everyone’s calendar enabled.

But when you’re trying to set something up with someone that doesn’t have a calendar you can access publicly, the email exchange usually goes something like this:

To: tim@somecompany.io
From: sam@quickleft.com
Subject: catch-up next week?

Tim —

Do you have a few minutes for a quick phone call next week?

—

To: sam@quickleft.com
From: tim@somecompany.io
Subject: RE: catch-up next week?

Sure, can you do next Tuesday at 2pm?

—

To: tim@somecompany.io
From: sam@quickleft.com
Subject: RE: catch-up next week?

Unfortunately, no. How about Wednesday at 3 or Thursday at 1?

—

Ad nauseam.

In the absolutely best case scenario, Tim and I are going to schedule a meeting in 1 turn of the email feedback loop. In the worst case scenario, we’re going to go back and forth half a dozen times before we actually find a time that works.

Short of picking up the phone to talk about finding a time to have a meeting, we’re bound to fall into this trap pretty often if we schedule lots of meetings.

Learning a better opening move

The venerable former-Quick Left’er Bing Chou had the clever habit of always sending out 3 – 5 options for times when opening a request for a meeting. He formatted the options in the same way, and always got quick responses for his meeting requests.

I was quick to adopt it into my workflow when I had to set up a meeting with a client, and it did indeed lead to shorter email exchanges.

To: tim@somecompany.io
From: sam@quickleft.com
Subject: catch-up next week?

Tim —

Do you have a few minutes for a quick phone call next week? Here are some times when I’m available:

* Wednesday 2 - 3pm
* Thursday 1 - 4pm
* Friday 11:30am - 12pm

Let me know when works for you and we’ll get something scheduled.

With the skill of a grandmaster, my opening gambit in the war to setup meetings is so strong that it makes it practically rude to refuse a time. I mean, if I took the time to find out all the times I’m free and can meet with you, there’s probably 30 minutes in there that works for both of us.

But the developer in me wasn’t satisfied.

Every time I found myself pulling up my Google Calendar to find a time that worked, I sighed. Clearly this is work a computer can do, better than I can with my pathetic monkey-brain! I want to use my pathetic monkey-brain to focus on shiny objects and rectangular screens, not furrow my brow and turn a grid of color boxes into a text-based list.

Automate all the things!

Over a long weekend, I pulled together a quick-and-dirty app to satiate my laziness. A few calls to the Google Calendars API and I had a solution that gave me more or less what I wanted.

It turns out that solving the problem was relatively straightforward: Google exposes a poorly-named “freebusy” endpoint that gives you a list of all the times that you’re busy for a given date range. The inverse of that list (unfortunately not an official API endpoint yet) is all you need to quickly generate a text list of when you might want to be able to meet.

My solution was a little rough around the edges but it got the job done, so I deployed it to Heroku and called it a day. Over the course of about a year, I tinkered on this side project every now and then; eventually giving it a possibly-too-clever domain name, unavailable.at, and discovering the inevitable limitations of my codespiked solution.

After enough lingering frustration, and having reverted to my world of sighs when manually having to compute lists for multiple people at the same time, I embarked on a refactor to make my humble app a proper solution for this problem.

See, there’s a place for Ingrid, Joe and I to have a meeting:

Laziness is the raison d’être for most software. Remember that.

— Jenn Schiffer misquoting Donald Knuth

Once the tough problems got sorted, it was time to give it a bit of a facelift (with help from the Topcoat CSS framework) and a more less-clever domain name.

Under the hood, it uses Express, Backbone and React, the latter of which has been a lot of fun to work with and is the subject of an upcoming Quick Left Engineering Lunch.

Oh, and it's 100% open source.

Announcing When.works

When.works is mobile friendly, can support as many calendars as you can throw at it, works with multiple timezones, and lets you pick your desired meeting length.

I will never again look at my Google Calendar like an animal, to find out when I’m free for a meeting.

Meetings already take up enough of your time without the headache of scheduling them.

Let when.works help find the time for your next meeting!

Made with emoji hearts in Boulder, Portland and San Francisco.