Algorithmic scheduling
October 10, 2013
A few weeks ago I had an idea.
All of my scheduling constraints are imposed by other people. For example, I have to go to an interview at 1pm because that’s when the recruiter is available. Or I have to go to class at 2:30 because that’s when my university scheduled it. Everything on my calendar has to happen at a specific, rigid time because that’s when someone else scheduled it—or that’s the time we previously agreed upon.
Sometimes, scheduling is difficult. I remember trying to create a rehearsal schedule for my music group was a nightmare—it seemed like there was no rehearsal time that worked for everyone. Similarly, I was recently trying to organize a banquet potluck and found it obnoxiously frustrating to coordinate.
I asked myself: where do everyone’s time constraints come from? Surely, there must be some fountain of scheduling constraints that everyone is drinking from. I quickly realized that scheduling constraints are almost always artificial—ultimately, it all comes down to when people agree to meet. There’s a cost associated with rescheduling—and this cost is mostly one of bookkeeping and communication.
For example, the reason I can’t meet with you tomorrow at 3pm is because I have a meeting with my coworker from 2-4pm. But that meeting with my coworker was scheduled for an arbitrary time that worked with both of our schedules—why can’t I just reschedule it? Because that’s the only time that works for him. But why can’t he reschedule his other meetings so I can reschedule my meeting with him? Simply because this is a logistical challenge that takes time and energy to resolve.
Fundamentally, there’s only one strict constraint: you can’t be at two events at the same time. So we want to maximize the number of items on our agenda such that the items never overlap.
This is just a textbook computer science problem in disguise! Optimization, network flow, graph theory, constraint satisfaction, artificial intelligence, something like that. I have the tools to solve this problem.
So imagine this: a computer program that arbitrates everyone’s schedules to find the globally optimal solution. People are really good at acting like greedy algorithms and finding locally optimal solutions. But we could be so much more efficient if this was done algorithmically—a computer has no problem working out the logistical details of coordinating everyone’s schedules. So you tell it who you want to meet with, rather than when you want to meet. It knows your schedule, it knows their schedules, it knows how to work it out. It’s frames the scheduling problem in terms of a social graph. Scheduling is a social activity, after all.
I have a million other ideas that piggyback off of this one. Perhaps you have some preference for when you want to meet. Maybe you want to meet in the afternoon, because that’s when you can focus the best. You can associate some cost function with this event that penalizes the algorithm for not scheduling it in the afternoon. Maybe it’s a parabola centered at 2pm. You could control the focal length of this parabola—this lets you tell the algorithm how much you care about this preference.
Maybe you can tell it that you have a homework assignment due at 5pm on Friday. You know it will take you four hours to finish—but you don’t care which four hours. The algorithm finds time for you to work on it, or makes time if necessary.
Maybe you have other kinds of constraints. You know that you need to pick up your cousin’s gift from the UPS Store before you can go to her birthday party. The algorithm will make sure these events happen in the correct order. Or maybe you want to have lunch and dinner every day, but not within 4 hours of each other. The algorithm should be able to space those events apart.
I could go on forever. But the point is that I’m trying to convince you that the way we think about scheduling is outdated. Finding times to do things is an algorithmic process, and computers should do it for us. What we care about is who we want to meet with. And that’s the primary input to this algorithm.
A few concerns:
- People will be disgruntled with the idea of a computer shuffling around their calendars. For example, you don’t want to be in the middle of a 2-hour drive to a board meeting, only to find out that the meeting has been rescheduled for tomorrow because the algorithm was trying to schedule the CEO’s dentist appointment today. Solution: freeze all events that are within, say, 24 hours of the present. This window should be configurable.
- UI/UX challenges. What is a user-friendly way to input all this data into an application? I have a few ideas. For example, start with a Google Calendar-like interface. When you create a new event, you see a heading entitled “Event Time.” Underneath this heading you see a time/date picker control, but this is grayed out by default. On the right of the time picker, you see a slider control that defaults to the far right—indicating “Don’t care.” If you drag this slider to the left, you are indicating that you have some preference for the time. Then the time picker control becomes enabled. You can drag the slider all the way to the right, indicating that the event has to happen exactly at the time you specify. Or you can leave the slider somewhere in the middle, indicating a mild preference. I think, if done right, this would be fairly intuitive.
- People will be too lazy to input all this information into an app. That’s fine—they can use it like a traditional calendar if they like. But the more information you give it, the smarter it becomes—and the more it can do for you.
- The “dating site problem”—the app is only useful if everyone uses it already. This isn’t really true—when you’re the only one using it, it’s no worse than Google Calendar (it’s better: the app can still help automate your schedule). In my vision for the product, the app can act as your secretary to the outside world, even if the world doesn’t use it. If someone wants to schedule a meeting with you, you can point them to some webpage where they can book a time on your calendar (without necessarily revealing what’s on your calendar), and you don’t have to be a part of the process. This saves you time, and also promotes the product.
- How can it be monetized? Two ideas come to mind. First, advertisements that target you based on your schedule—which should be much more effective than normal ads, because they will be more relevant to your life (e.g., “Hey! Why don’t you go to this concert on Saturday? You’re not doing anything else this weekend!”). Second, an enterprise version of the product. A company could save a lot of man-hours using a product like this—and as a bonus, the app could automatically reserve conference rooms and ensure that they don’t get double-booked. Additionally, it would enable the company to do all kinds of crazy scheduling feats—like scheduling a 400-person conference on a moment’s notice. Everyone’s schedules would be automatically re-optimized to make it possible.