Thursday and Friday are Microsoft holidays, so the next new post will be on Monday.  In the meantime, here's a "holiday" treat for you.

Thanksgiving in the United States is a holiday that always occurs on Thursday.  However, one year Microsoft moved it to Wednesday.  How?  Read on.

Growing up as a program manager working on Outlook, one learns a lot about the variety of ownership areas available in a product.  Outlook has marvelous opportunities: if you want to work on user interface, Outlook has tons of that.  If you want to work on a technical area, you can get involved with internet protocols and MAPI and RPC and the PST.  If you want to own big meaty features, you could own the calendar or the address book.

But, like in any trade, there are some less fun jobs as well.  As a novice PM in Outlook, there were a number of areas you could get assigned as a way of kind of "paying your dues": the Journal or the file system browsing module, for example.  Or, as I did, you could get stuck owning the very bottom of the barrel: holidays.

Outlook has always had a feature by which you could add holidays to your calendar.  I'm not sure who designed it, and I don't think it's in the huge book of original Outlook specs I have, but by the time I was first on the scene in Outlook 98, it was already designed, built, and in the product.

The feature was pretty bare-bones; it works like this.  There's a text file on the hard drive which includes holiday information in a very simple format.  (If you have a recent version of Outlook, search for an OUTLOOK.HOL file on your hard drive.)

The contents of the file look something like this:

[Korea] 80
Arbor Day - Singmok-il,2005/4/5
Arbor Day - Singmok-il,2006/4/5
Arbor Day - Singmok-il,2007/4/5
Buddha's Birthday - Seokgatansin-il,2005/5/15
Buddha's Birthday - Seokgatansin-il,2006/5/5
Buddha's Birthday - Seokgatansin-il,2007/5/24

When you choose to add holidays to your calendar, Outlook looks in the file (using string matching) to find a section with the country name you specified and then creates appointments for any dates specified in the file.  There's also a tiny bit of code which tries to avoid obvious duplicates.

The "Add Holidays to Calendar" dialog in Outlook

Once they're on your calendar, the holidays are just normal all-day appointments.  There's never been a way to represent religious holidays that start at a certain time of the day (such as sundown.)  Or to have a multi-day holiday represented except as individual appointments.

But the challenging part of owning the feature was the tedium associated with shipping a huge text file full of names and dates that have to be generated and verified mostly by hand.  I had passed on to me a voluminous "World Holidays" book and a couple of web sites to use as references... but so many holidays change or are based on bizarre lunar schedules that most have to be entered in and tested by hand each release.

The result was a feature design prone to failure in three ways:

  • Adding holidays to the calendar was a pure "import" of appointments.  There was no way to later automatically update or remove them once they had been added to the calendar.
  • Outlook 97 shipped 10 (ten!) years of holidays on the CD.
  • The process of creating the thousands of holidays involved typing them in from a book and proofreading them by hand.

Sigh.  It only took a few weeks after Outlook 97 appeared for people to notice a rather, ah, interesting Thanksgiving schedule.  That's right: Thanksgiving on a Wednesday.

Of course, many snarky press articles were written about Microsoft declaring a new holiday schedule.  The bug was fixed in the first service release of Outlook 97 (8.01), but because of the way the holidays feature was implemented, there was no automated way to fix it on anyone's computer who already had added the holidays. 

Happily, all of this transpired before I worked at Microsoft, but it made working on holidays that much more ominous--I didn't want to be the one at fault for the next "Thanksgiving on Wednesday."

The only other snafu I'm aware of (at least within the United States holidays) was a few years ago when yet another Outlook 97 bug surfaced: Memorial Day was a week late in 1999.  We issued a tool that could fix that holiday on the fly, but not everyone found out about the error until it was too late.  One particularly sad case I remember is that a couple bought tickets for the Indianapolis 500 automobile race which occurs each year on Memorial Day.  Unfortunately, they purchased plane tickets based on the dates in Outlook and somehow missed that Memorial Day came and went.

The short of it was that they ended up in Indianapolis a week after the race ended, confused and with nothing to do.  Eek.

I think we've done a much better job in the years since Outlook 97 at automating the process of creating and validating the holidays files (knock on wood.)  It's a tedious task, but one that's important to get right.  People depend on Outlook to run the details of their lives, and it needs to measure up to that trust.

As for the holidays themselves though, I'm reminded of the standard mapping software disclaimer: "be aware that some roads may not exist."

Don't Be Fooled: Thanksgiving's Always On Thursday