Ticking off the TOC

Every now and then I get mail along the lines of:

"Hey Micro$oft, how come yer Subscriber Downloads site is so bad?  It takes the Table of Contents 5 minutes to load over my Packard Bell 28.8K modem!?!?!".  U have $40 Billion dollars so why don't you spend some and fix the stupid Subscriber Downloads site we're paying so much for?!?!?!?"

Typically, I would think to myself:

1.  They don't actually let me write checks against the whole $40B, for some reason
2.  He's right, the Table of Contents really has some problems

In the old Subscriber Downloads architecture, our Table of Contents (TOC) is actually a generated XML file (one file per TOC type) that we staged to each Subscriber Downloads Web server - IIS would take the XML, turn it into HTML, and render the TOC after you log in.  This system was pretty performant when it was designed in 1997, but had a few problems:

1.  As we added additional UI languages and subscription levels, generating a TOC was something that started to take more and more time.
2.  As we added more products the TOC got bigger - at the end our Universal TOC was nearly 800K
3.  The system isn't flexible to handle complex content requirements

This is why, for instance, a customer in the Tunisia could see MapPoint in the TOC but not do the download - generating TOCs in this fashion didn't conveniently allow us to have a MapPoint and non-MapPoint TOC for each subscription level and UI language.  (Well actually it could, but it's an exponential increase in the number of new TOCs you generate for each new exception).

So, our new update actually is a total rewrite of our content administration system, the cornerstone of which is a new content administration / TOC model.  In our new system, your TOC will be generated individually for each subscriber based on their various subscriber attributes.  These include the subscription level, locale, whether it's a retail subscription or from a volume license program, and so on.  When a customer comes to the site our content system (called Xena) evaluates the customer's subscription attributes, determines the content available to them, and generates a unique Table of Contents.  It's pretty slick, if I do say so myself.