Saturday, March 3, 2007

Outlook Calendar, Fundamentally Flawed

I use Outlook 2003 at work, because I am essentially forced to use it. We use an Exchange server, and while I could choose to use another email client via IMAP, I'd still have to use Outlook for its calendar functionality. After using it for some years, it's become apparent that a serious design flaw exists: there is no central authority for event information.

Each user has his or her own calendar, and each user's calendar is centrally hosted on the Exchange server. This is all good. But for every event, each user has his or her own copy. This introduces the problem that events can get out of sync. For instance, I've been invited a meeting, so I have a copy of that meeting on my calendar. I then can drag this meeting to a different time slot. I'm not rescheduling the meeting by doing this, and this doesn't effect any other attendee of the meeting, but now it appears to me that the meeting is at a different time than it actually is. Outlook does try to warn me when I do this, but why would it let me do this at all? (Ok, I just tried this out, so I could quote the warning, but Outlook didn't even warn me this time! Must be some option buried deep in the interface.)

So how does Outlook try to synchronize everybody's calendars? Email! When I propose a meeting, an email goes out to each invitee containing all the information about the meeting. For the user receiving the invitation, Outlook detects that this is a meeting invitation, and gives the user three buttons: accept, decline, and tentative. When one of these buttons is pressed, Outlook gives the user the opportunity to send a reply. Up to this point, it's not so bad.

When I receive the reply, my instance of Outlook uses the information attached to the email to update the meeting on my calendar with information about who has accepted and who has not. Most of these emails are empty, except for the attachment, but the invitee does have an opportunity to write something. If I'm proposing a very large meeting, these many empty replies are incredibly annoying. I would like to see the ones where the invitee had something to say, and I would probably like to be notified in some way of the declinations, but I really don't want to sift through all of the empty "accept" replies.

Now let's say I want to invite an additional person, say Jane, to my meeting. I add her name to the list of attendees, and Outlook asks me whether I want to send updates to all the invitees, or just send an invitation to Jane. In the first case, all the invitees will get an email, and Outlook will ask them to re-accept the meeting. It won't be readily apparent that the only change to the meeting is that Jane has now been invited, but they will see Jane's name on the list of attendees, if they look. That's pretty annoying. If I choose the second option, only Jane gets an email, and the other invitees will not see Jane's name on the list. So the choice is basically between annoying my invitees while allowing them to keep their copy of the meeting current, or forgoing the annoyance and letting the calendars get out of sync.

Worse things can happen, due to this replication of data and this silly email synchronization. In particular, since a user can get multiple messages about a single meeting, these message can be accidentally processed out of order, or old updates that have be obsoleted may be reprocessed. This can lead to a meeting appearing to be at a different time or different location that its actual time or location. Outlook does sometimes warn when an update is being processed in the wrong order, but sometimes it doesn't. I haven't figured out what accounts for the inconsistency. But even if it did warn consistently, why should the user even be given the opportunity to make this mistake?

A better way to do calendars is to have a central authority for each event. User calendars, instead of having copies of each event, would just have pointers to the original. The calendar would look the same to the user, but the data behind the calendar would be coming from a different place. If I've proposed a meeting, and I want to change the location, my client would just update the master record of that meeting on the server, and then every invitee's calendar would reflect the change. No need to send an email update. The invitees' clients could take care of notifying the user when something has changed about a meeting, and the client could allow customization so the user can select what sorts of changes actually trigger notifications. Outlook already takes advantage of the central hosting of everyone's calendars, because it allows someone proposing a meeting to see the availability of each of the invitees. It could certainly also take advantage of this central hosting to avoid replication of data about events and eliminate these synchronization issues.

I suspect that Outlook is the way it is because Microsoft wanted to support environments where things are not centrally hosted. For instance, the way Outlook currently works, I could invite someone to a meeting at a different company, even though that person's client cannot talk to my company's exchange server. But for nearly all of the meetings I deal with, all the invitees work for the same company that I do, and their Outlook clients talk to the same Exchange servers that mine does. In this situation, Outlook/Exchange does not work anywhere near as well as it could. So listen up, Microsoft. Get busy and fix this, or Google is going to eat your lunch.