I want to talk for a moment about Outlook and Google Calendars, and how they suck for corporate business use.
Both products use an “event” model for creating calendar items – this make sense for actual events like birthday parties and appointments like visits to the doctor. When you go to create a calendar item, the starting questions are: WHEN is this event, and WHERE will it be?
But for business use, the use case is usually “we need to get these 5 people in a room to discuss something and make a decision”. The starting question is: WHO needs to attend, and what is the meeting LENGTH? There may be a day in mind, but the specific time and place are driven by when each attendee has available time, and when a meeting room is available.
Despite this being the primary model for most business meetings, I have never seen a tool take this approach for building meetings.
Here is how I would design the flow for this tool:
Inputs: Attendees (+optional/required), meeting length, desired day
Data: Attendee availability, room availability, room size
Output: List of room/time pairs that would work for the meeting that day. Optionally, times that would work the previous or next business day (assuming the previous day is still in the future).
Action: User selects one of the returned time/place results, is prompted for meeting name/description and clicks “Create meeting”
Result: Meeting is created at the selected time with the room and attendees specified, using the provided name/description.
This flow would make much more sense for booking meetings in a corporate setting. The default event method is fine for actual events, or larger meetings where the meeting can happen without all attendees present (e.g. department quarterly meeting).
I’m tempted to give this a shot with the Google Calendar API, although a quick look appears to show the only method for checking if someone has a time free is to send a specific time range and get back a boolean, so there may be a lot of queries required to find a common time that works for everyone.
One approach might be to take the required attendee count, query for rooms available that day (filtered by working hours and no meetings from noon-1pm), then for the times rooms are available, query each attendee.
Results could be weighted, so if there are no times that would work for everyone, the count of free vs total attendees for a given time would be used for the sort, and could return with a “warning: X, Y and Z cannot attend at this time”.
Definitely something worth playing around with.