I've been reading some interesting conspiracy theories about why some recent Microsoft product launches have missed the boat on targetting features of interest to tech geeks.

In his post Microsoft's lack of action will slow Podcasting Growth Todd Cochrane writes

Well it is pretty obvious that Microsoft did not get Podcasting support built into Windows Media Player 11 and all I can say is that they obviously blew it. I have been debating what to say for a few days. My summation is not fit to print, what I really don't understand is how they could have been so stupid.

They had a opportunity with Windows Media Player 11 to get in the game, I can guarantee that their inaction will slow the growth of podcasting in a big way. But it makes sense Podcasting does not make them any money, if I were a betting man I bet MTV had something to say in the process and likely killed any podcasting integration as it would have made the URGE network a lesser value.

In his post How Internet Explorer Stifles Microsoft Devanshu Mehta writes

Microsoft has chosen the growth of IE over every other division in the company for 10 years now. Windows versions from 95 onwards have suffered enough. Now, the company’s IE-centric view of its business is hurting younger divisions of the company that have a chance of becoming a major force as the company looks to take on Google...It all began when MSN announced their AdCenterGoogle AdWords- sells text-based, contextual, per-click advertising for MSN properties on the internet. Curious, I went to sign up for an account...I was more curious in Microsoft’s method, their design and approach as compared to my experience with AdSense. So I went to the MSN adCenter site and clicked to sign up. service which – similar to

Lo and behold:

Microsoft adCenter does not currently support the web browser you are using. Please sign in using Internet Explorer 6+. More about system requirements
Oh great! Another MS web site that does not work with Firefox. So I click on the phrase system requirements to find out what I would need. Would a Mac user like me have any recourse? Or did MS not want my business? It only got worse. The System requirements link did not work either! Not only could they not design a web site for my browser, they couldn’t even manage to create a link to their requirements page that I could click on!

Unlike Devanshu and Todd, I don't think there are sinister conspiracy theories for why two Microsoft products were released and ignored features of interest to the geek demographic. In every product release, you have a limited amount of resources and time in which to apply those resources to your next version. This means that you tend to focus on features that will provide the most bang for the buck and may ignore features that have limited appeal such as supporting a browser which is used by 8% of the market or a media subscription model is only used by 1% of internet users. I don't always agree with the practice of deciding on features based on market penetration statistics but I can understand when product teams make such decisions. I suspect that is more likely the cause of these omissions than some nefarious collusion between MTV and the Windows Media team or some plot to ensure IE's market dominance by having Windows Live services require only that browser.

Disclaimer: The post above is my own personal opinion and does not reflect the opinions, intentions or strategies of my employer or the Microsoft product teams referenced.


Categories: Life in the B0rg Cube

I took a shower on campus this morning because I got stuck in traffic and didn't have enough time to do my work out. Usually I'd still go to the gym just to take a shower but thanks to the recent changes I could just come into work and use the showers in my building. There were a bunch of folks in the locker room and the conversation dwelled on the return of the towels for most of the time I was there. I couldn't help but remember one of my old blog posts entitled On Cost Cutting: Penny Wise, Pound Foolish where I wrote

Recently I found out that we no longer had office supplies on the floor of the building I work in. Now if you need to grab a pen or get a marker after your last one runs out in the middle of a meeting you need to go upstairs. Folks have given me the impression that this is due to the recent cost cutting drive across the company. At first, I couldn't figure out why disrupting people by making them go to another floor for office supplies would cut costs.

Then it hit me. When faced with having to go to another floor to find office supplies the average geek desk jockey will probably say "forget it" and do without. The immediate saving is less office supplies used. But I suspect this is only phase one of the plan. Most people at MSFT believe that on average 50% - 75% of projects and features an employee works on in his career in the b0rg cube never ship. This is all just wasted cash. The best way to nip this is in the bud by preventing people from being able to write down their ideas or whiteboard different ideas with coworkers thus spreading the meme about new projects or features. The amount of money saved by not investing in new money losing ventures like *** and **** would be immense. It all makes a weird kind of sense now.

Of course, the post is tongue-in-check. However a later post where I pointed out that moving office supplies to 'cut costs' was an example used in The Dilbert Principle in a section entitled Companies That Turn On Themselves was not. It sucks when you realize your day job is ripped from the pages of Dilbert. The towel issue was another example of how company can turn on itself. A comment on TDavid's blog by Eric captures the sentiment of many fellow b0rg drones when he writes

Here’s the point on the towels:

1) Health care costs are a huge - and rising - expense for Microsoft. People who are using the towels are exercising - some of them pretty heavily - and are therefore likely to save MS a significant amount of money.
2) There is a serious parking shortage at MS. Some of the people who use the towels are commuting by bicycle, and therefore aren’t taking up a parking space - which has a specific cost per year that you can figure out.

It’s in Microsoft’s best interest to encourage both of those behaviors, and in fact, they have programs specifically designed to encourage such behaviors. But they made a decision that actively discouraged people from these behaviors, for a very measly cost savings.

It’s not that people felt that they *deserved* free towels. It’s that by taking away the towels, management was demonstrating that they weren’t paying attention, because doing so was so clearly against the programs already in place, and clearly not in the company’s self-interest.

I care whether my company has internal coherence in its decisions, and I think that customers and stockholders should also care.

The towel thing was penny wise yet pound foolish. I'm glad that there are two less Dilbert-esque things about my day job. The perks like better cafeteria food and the like are actually less interesting to me than just getting rid of counterproductive practices like The Curve, playing hide & seek with office supplies or removing complimentary towels from on-campus showers.

PS: While looking for the link above, I found one of my old blog posts entitled Post Mortems, Reorganizations and the Dilbert Principle which makes me realize that my blog used to be a lot better two years ago. :)

PPS: For the various folks in the B0rg cube who talk about how much better things are at places like Google, this thread may be of interest to you. The grass is always greener on the other side of the fence.


Categories: Life in the B0rg Cube

In his post Missed big HR meeting (MyMicrosoft is now improved) Robert Scoble mentions that he missed yesterday's town hall meeting at work where a bunch of employee benefits/compensation changes were announced. I missed the meeting as well because I took a friend on the Ride the Ducks of Seattle tour. I haven't been to work yet so I haven't read what the changes are but bits and pieces have come out in blog posts and news articles. Todd Bishop excerpts some of the highlights in his blog post Microsoft rethinks employee reviews ... and towels such as

  • "To reset our approach, beginning with this review period we are retiring the 2.5-5.0 rating scale and introducing a three point Commitment Rating scale of Exceeded, Achieved and Underperformed. ... There will be no forced distribution (i.e. curve) associated with this commitment rating, which allows managers and employees to have a more candid discussion about performance."
  • "We are increasing our investment in our annual review stock award program. This incremental investment is focused on providing meaningful stock awards to our top talent. 'Top talent' refers to employees who are strong performers, achieve results in the right way and are expected to make the greatest future contributions."
  • "We're planning to provide on-campus access to a variety of services, including laundry and dry cleaning, grocery delivery from Safeway and opening convenience stores -- all of which are designed to ease the burden given the hectic pace of life. We will expand and upgrade dining services adding great new retail food in select cafes, dinners to go from Wolfgang Puck and other services. We are also arranging discounts on a variety of home services including house keeping, yard care, pet care, auto services and more.

Getting rid of the curve is great news. Having a quota of how many people get good or bad scores during annual reviews has been a recipe for bad morale for as long as I've seen it practiced at Microsoft. Bringing back a bunch of the stupid cost cuts like the towel service [free towels in the on-campus showers for people who bike to work] is just common sense. The amount of money it saved couldn't have counterbalanced the amount of bad will it generated. Better food in the cafeteria is cool, auto services is also interesting since I my car always seems to need washing and I never seem to have time to do it. I gotta say kudos to Lisa Brummel on doing something to make the employees lives better.

I was surprised to see negative comments from people who aren't Microsoft employees such as TDavid's post For employees Microsoft throws in the towels where he writes

In a move which is bound to be seen as placation and a serious case of Googleplex envy — by those who aren’t employees anyway — Microsoft has restored the employee towel service that was axed for “cost cutting measures.”...

Towels a “symbol of poor leadership?” Who da Punk’s real name must be Who da Kidding. If Microsoft plays lemming to anon cowards like this then the decline of their stock is far from over. I’m sure shareholders will be pleased that they restored towel service and put better food on the menu, thus restoring employee morale — until the stock drops even further.

Outsider customers like me have to wonder what’s next in the long list of employee perks for these major corporations? Why stop at the marginally sane perks? How about insane ones like escort services? If only Microsoft and Google were in Nevada, they could cut deals with the local brothels I’m sure. Heck, maybe escorts.live.com could be a promising vertical niche. The search for skin and sin is on.

I don't think the perks are worthy of such vitriol. First of all, a lot of the Googleplex-style perks are designed to keep people at work instead of having them leave early to manage their personal lives (e.g. getting the car washed, getting home early to walk the dog, etc) or leave campus for meals by having better food in the cafeteria. Secondly, it is common knowledge that Microsoft doesn't pay that great. I've heard that our pay scale is in the 65th percentile meaning that for every 10 companies out there, 3 to 4 of them would pay the average Microsoft employee more for doing the same job. In a climate where Google recruiters are spamming every half-decent employee at Microsoft and recruiter cold calls are not unheard off, the company needs to step up its game if it plans to retain its talent in an increasingly competitive software landscape. 

Taking care of your employees is just good business.


Categories: Life in the B0rg Cube

Mary Jo Foley has an article on the Microsoft-Watch site entitled Worst Microsoft Product Name Ever where she writes

As Microsoft watchers inside and outside the company have noted, Microsoft is not terribly astute when it comes to naming its products. But on Wednesday, the branding department hit a new low, in terms of bad naming choices. Microsoft has decided to christen the new Windows desktop search application (that can search your desktop/Intranet and Internet), due to go beta later this year, as "Windows Live Search." But there already is a Windows Live Search – the Internet search service that is currently in beta. Are the two products the same? No, the Softies said. Are they related? Nope. We've decided we're going to try using Windows Live Search A (for the desktop app version) and Windows Live Search S for the MSN service. And we thought the SharePoint branding was confusing!

This sounds pretty amazing. Microsoft has created two unrelated products that are both called Windows Live Search. Wow. It's like we are determined to cause the Windows Live brand to turn to crap before any of the services even get out of beta. I guess the folks who were behind the .NET branding fiasco are still alive and well in the B0rg cube.

Update: I should clarify that this is likely just poor storytelling on our part as opposed to actual different products being named the same thing. If you read the press release Microsoft Enterprise Search Solutions Help Enable Effective Information Management you'll see the excerpt

To that end, the company will deliver a solution called Windows Live Search, which offers a single user interface (UI) to help people find and use all the information they care about from across the entire enterprise and beyond. It essentially binds together previously separate search solutions including Windows Desktop Search, Intranet search provided by Microsoft Office SharePoint Server 2007 and Internet search via Windows Live Search, among others. Any information available to any of these systems can be exposed in one place, instantly showing relevant and actionable search results from all its enterprise data sources, from the desktop and from the Web
To illustrate, a sales representative trying to find information about a customer she plans to visit could gather the needed data by accessing Office SharePoint Server 2007, initiating a search and pulling business data from a Siebel application in addition to gathering data off her desktop using Windows Desktop Search. However, the same search could be performed from within Windows Live Search to produce all of the relevant desktop, e-mail, intranet and Internet results. Furthermore, when the sales representative clicks through the results, she will see they are actually displayed from that same window. Windows Live Search displays full results without navigating away or opening additional applications.

The press release makes it hard to tell whether this is new functionality of http://search.live.com being announced or a duplicate product which is branded with the same name. If reporters are getting confused about our messaging then there is definitely something broken that we need to fix.


Categories: Windows Live

I just saw the following post on in the RSS Bandit forums entitled Dead? where one of our users asks

Haven't seen a news update in a long time, no releases for about 5 months... is rss bandit dead? It's a nice aggregator, but there are some neat features popping up in stuff like Rss Owl / other feed readers, so I'm debating changing readers...

...but if there's going to be active improvements in the future, there's no reason for me to learn an entirely new program just to come back to rss bandit in the end. ;)

What say you, Code Writers?

This has been bothering me as well. Torsten and I have been busy with our respective day jobs. Over the past few of months, I keep telling myself I'll start work on RSS Bandit "next week" but the following week always seems busier than the last. It hasn't helped that I've had conferences, vacations or out of town visitors every other month this year. I think I have the worst of the disruptions in my schedule done for this year. In addition, the project which has been consuming the lion's share of my time at work also looks like it will soon be able to go on auto-pilot.

Although I can't give an exact date for our next release, what I can say for sure is that we will have an RSS Bandit release this summer. What I would like from our users is some feedback on the RSS Bandit road map. I don't think I'm particularly attached to the features we currently have on tap for the Jubilee release. The major reworkings I'd like to do for the next release are fixing our excessive memory consumption, improving the integration with NewsGator Online, and rewriting our multithreaded code in a way that fixes the pernicious feed mix up issue. As for new features, the ones I want primarily revolve around enclosures/podcasts and conversation tracking similar to TechMeme, Megite and TailRank.

I believe Torsten also plans to revamp our UI. What else would you like to see us do in the next release?


Categories: RSS Bandit

If you're a regular reader of Don Box's weblog then you probably know that Microsoft has made available another Community Technical Preview (CTP) of Language Integrated Query (LINQ) aka C# 3.0. I think the notion of integrating data access and query languages into programming languages is the next natural evolution in programming language design. A large number of developers write code that performs queries over rich data structures of some sort whether they are relational databases, XML files or just plain old objects in memory. In all three cases, the code tends to be verbose and more cumbersome than it needs to be. The goal of the LINQ project is to try to simplify and unify data access in programming languages built on the .NET Framework. 

When I used to work on the XML team, we also used to salivate about the power that developers would get if they could get rich query over their data stores in a consistent manner. I was the PM for the IXPathNavigable interface and the related XPathNavigator class which we hoped people would implement over their custom stores to enable them to use XPath to query them. Some developers did do exactly that such as Steve Saxon with the ObjectXPathNavigator which allows you to use XPath to query a graph of in-memory objects. The main problem with this approach is that implementing IXPathNavigable for custom data stores is non-trivial especially given the impedence mismatch between XML and other data models. In fact, I've been wanting to do something like this in RSS Bandit for a while but the complexity of implementing my own custom XPathNavigator class over our internal data structures is something I've balked at doing.

According to Matt Warren's blog post Oops, we did it again it looks like the LINQ folks have similar ideas but are making it easier than we did on the XML team. He writes 

What's the coolest new feature?  IMHO, its IQueryable<T>. 

 DLINQ's query mechanism has been generalized and available for all to use as part of System.Query.  It implements the Standard Query Operators for you using expression nodes to represent the query. Your queries can now be truly polymorphic, written over a common abstraction and translated into the target environment only when you need it to.

    public int CustomersInLondon(IQueryable<Customer> customers) {

        int count = (from c in customers

                     where c.City == "London"

                     select c).Count();

        return count;


Now you can define a function like this and it can operate on either an in memory collection or a remote DLINQ collection (or you own IQueryable for that matter.)  The query is then either run entirely locally or remotely depending on the target. 

If its a DLINQ query a count query is sent to the database.

SELECT COUNT(*) AS [value]

FROM [Customers] AS [t0]

WHERE [t0].[City] = @p0

If its a normal CLR collection, the query is executed locally, using the System.Query.Sequence classes definitions of the standard query operators.  All you need to do is turn your IEnumerable<Customer> into IQueryable<Customer>.  This is accomplished easily with a built-in ToQueryable() method.

  List<Customer> customers = ...;


Wow!  That was easy.  But, how is this done?  How can you possible turn my List<T> into some queryable thingamabob?

Good question.  Glad you asked.

Check out this little gem: 

  Expression<Func<Customer,bool>> predicate = c => c.City == "London";           

  Func<Customer,bool> d = predicate.Compile();


Now you can compile lambda expressions directly into IL at runtime!

ToQueryable() wraps your IEnumerable<T> in IQueryable<T> clothing, uses the Queryable infrastructure to let you build up your own expression tree queries, and then when you enumerate it, the expression is rebound to refer to your IEnumerable<T> directly, the operators rebound to refer to System.Query.Sequence, and the resulting code is compiled using the built-in expression compiler.  That code is then invoked producing your results.

Amazing, but true.

I think it's pretty amazing that all I have to do as a developer is implement a simple iterator over my data structures (i.e. IEnumerable) and then I get all the power of Linq for free. Of course, if I want the queries to be performant it would make sense to implement IQueryable directly but the fact that the barrier to entry is so low if my perf needs aren't high is goodness.

For more information on LINQ, read the Linq project overview. If you are like me and are primarily interested in XLinq then check out XLinq: XML Programming Refactored (The Return Of The Monoids) which has the fingerprints of my former team all over it. Way to go guys!


Categories: XML

One of the reasons I like providing APIs to online services is that it gives users more control of their data. Alex Boyko, who's one of the testers on our team wrote a tool for migrating his blog from one blog service to the other using the APIs they provide. In his blog post Blog Content Transfer he wrote

Apparently, my old blogging site (Blogger) and the new one (MSN Spaces) expose some APIs that can be used to play with your content (Metaweblog API for Space and Atom API for Blogger). I spent some time over the weekend and wrote a tool that helped me to transfer my data between two sites.

In case if somebody else is excited about gleams as much as I am ;] I've decided to share a copy of BCTransfer (Blog Content Transfer).


Please let me know if it works and especially if it does not work for your. I’ll be more than glad to help.

Please read this first. It tells your how to get a login for your space.

At this moment, it is a command-line tool written using .NET 2.0. So you need to have it installed (the easiest option for that is Windows Update). Here’s how you run it in the most basic scenario:

bctransfer -bu <old-username> -bp <old-password> -su <new-username> -sp <new-password>

Yet another reason why providing APIs for online services is a good for regular users as well as developers. Nice.


I found the following comments by Om Malik and Mike Arrington to be quite telling.

In his blog post entitled The Myth, Reality & Future of Web 2.0 Om Malik writes

The Myth of Web 2.0 is the investment opportunities. The reality of Web 2.0 is too little original thinking. Web 2.0, simply put, is a set of technologies and a new kind of thinking, which companies like Yahoo, Google, Microsoft and AOL are incorporating in their products. That’s the reality and the future of Web 2.0.

In the blog post entitled AOL To Release YouTube Clone Mike Arrington writes

Prepare for the launch of AOL UnCut (currently in open beta), a near perfect clone of YouTube...This is right on the heels of the launch of AIM Pages, which is directly targeting Myspace and other social networks...I am seeing an increasing trend of the big guys simply copying what successful startups are doing. AOL with this product and AIM Spaces. Google with Google Notepad and a flurry of other projects, etc. The only large company that is even experimenting with unproven concepts at this point is Microsoft with its various Live.com ideas. I’d like to see more experimenting at the big company level.

I guess the criticism has now grown from 'building a new Windows app is just doing research for Microsoft' to 'building a new Web application is just doing research for Google/Yahoo/AOL/Microsoft'. The more things change, the more they stay the same.

On the positive side, it is good to see Microsoft being called innovative in comparison to Google by a technology pundit.


Tim Ewald has been blogging about ways to add versioning to web services which work around the various limitations of the W3C XML Schema Definition Language (XSD).One bit of insight I always like to share when talking about XSD is that there are two primary usage scenarios that have developed around XML document validation and XML schemas. My article XML Schema Design Patterns: Is Complex Type Derivation Unnecessary? describes them as

  1. Describing and enforcing the contract between producers and consumers of XML documents: An XML schema ordinarily serves as a means for consumers and producers of XML to understand the structure of the document being consumed or produced. Schemas are a fairly terse and machine readable way to describe what constitutes a valid XML document according to a particular XML vocabulary. Thus a schema can be thought of as contract between the producer and consumer of an XML document. Typically the consumer ensures that the XML document being received from the producer conforms to the contract by validating the received document against the schema.

  2. Creating the basis for processing and storing typed data represented as XML documents: XSD describes the creation of a type annotated infoset as a consequence of document validation against a schema. During validation against an XSD, an input XML infoset is converted into a post schema validation infoset (PSVI), which among other things contains type annotations. However practical experience has shown that one does not need to perform full document validation to create type annotated infosets; in general many applications that use XML schemas to create strongly typed XML such as XML<->object mapping technologies do not perform full document validation, since a number of XSD features do not map to concepts in the target domain.

If you are building a SOAP-based XML Web service using the toolkits provided by the major vendors like IBM, Microsoft or BEA then it is most likely that your usage pattern aligns with scenario #2 above. This means that your Web service toolkit isn't completely enforcing that documents being consumed or generated by the service actually are a 100% valid against the schema. This seems bad until you realize that XSD is so limited in the constraints that it can describe that any XSD validation done would still need to be backed by a further business logic validation phase in your code. In his post Making everything optional Tim Ewald writes

DJ commented on my post addressing the problem Raimond raised with my versioning strategy. He wondered if he'd missed an earlier post where I argued that you not use XSD to validate your data because if you make content optional, you can't use it to check what has to be there. Since I haven't written about that yet, I figured I'd start to address it now.

When people build a schema for a single service, they tend to make it reflect the precise requirements of that system at that moment in time. Then, when those requirements change, they revise the schema. The result is a system that tends to be very brittle. If you take the same approach when you design a schema for use by multiple systems, describing a corporate level model for customer data for instance, things are even worse. Some systems won't have all the required data. They have to decide whether to (a) collect the data, (b) make up bogus data, or (c) not adopt the common model. None of these are good approaches.

To solve both these problems, I've started thinking about my schema not as the definition of what this system needs right now but as the definition of what the data should look like if it's present instead. I move the actual checking for what has to be present inside the system (either client or service) and implement it using either code or a narrowed schema that is duplicate of the contract schema with more constraints in place.

There are important lessons in Tim's posts which are unfortunately often learned the hard way. A document or message can have different required/optional fields depending on what part of the process your are in or even whether it is being used as input vs. output. It's hard to come up with on single schema definition for a common type across a system without resorting to "everything is optional" and then relying on code to do the specific business logic validation for which phase in the process your are in.

There's another great comment in Tim's follow up post More on making everything optional

I think it's important not to confuse your schema with your contract. A client and a service have to agree on all sorts of things, only some of which are captured in your WSDL/XSD(/Policy). My goal in proposing that almost everything in your XSD be optional is to find the sweet-spot between easy coding and flexibility for evolution.

Amen! Preach on brother.


Categories: XML Web Services

Steve Rubel has a blog post entitled Dissecting Windows Live PR with Data where he uses the infamous Alexa traffic chart which has become popular among bloggers and other amateur pundits to dissect the populariity of a website. Specifically he writes

According to Alexaholic there was a lag between these news events and when the site became a regular visit for many consumers. In other words, it took Windows Live a considerable amount of time following the launch to build any kind of critical mass. (A caveat here. Alexa data is questionable when measuring true traffic data because it amounts for a small subset of the total browsing public.  However, the overall trends it shows I feel are bankable.)

Picture 4-2

I've noticed that quite a few folks have misinterpreted the traffic spike within the past month for the live.com domain in Alexa. If you take a deeper look at the Traffic Details for Live.com you'll notice the following data

  • login.live.com - 46%
  • mail.live.com - 38%
  • ideas.live.com - 6%
  • live.com - 4%
  • local.live.com - 2%
  • help.live.com - 1%
  • expo.live.com - 1%
  • safety.live.com - 1%
  • Other websites - 1% 

That's right, the largest chunk of the traffic for the live.com domain is split between the Passport Windows Live ID login page which is now being used by most MSN and Windows Live services when signing in. The second largest slice is for the Windows Live Mail beta. I don't think one can draw any conclusions on the 'adoption' or popularity of Windows Live based on this data.


Categories: Windows Live