Thanksgiving on a Wednesday
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