First a caveat, I come from a strong Microsoft background. Since 1995 when the web really started to take off I have used MS technologies almost exclusively. Prior to that, my experience in Pascal, C, Fortran, etc was all really on pre-PC systems. Circa 2004, I found myself as a Principal of a well known San Diego based MS gold partner consulting firm. I was responsible for delivering million dollar plus projects on the MS stack, and was a frequent speaker at MS events. At the time I thought MS was the best thing since sliced bread. They had phenomenal developer support, and went to great lengths to ramp people on their technology.

Well a lot has changed in the last few years, least of which is my impression of MS technologies. I always had a hard time understanding the prejudice I would see against MS technology, especially in the Fortune 1000 enterprise space, where even mentioning the name would get you a sour look from entrenched IT people. I pretty much chalked it up to unsubstantiated emotional prejudice on the part of non MS people who liked to look down their nose at MS technologies and the people who used them.

Now that I have departed from the MS stack and have been working almost exclusively with Adobe Flex and its related technologies for the past 2.5 years, I have been exposed to the other side of the coin. I still do/manage some .Net development for our web services, file I/O and DB related stuff, but it only takes less than 5% of my engineering time. The Flex community has a very open-source feel to it (I guess now it really is becoming open-source.) When I first started working with Flex I was astonished to see that Macromedia (now Adobe) gave me as a developer direct access to the source code. What joy! I could see how things worked, tweak it, and learn from it. Once I got involved with the Flex 2.0 beta, things got even better. The team had a high level of transparency and I could actually talk with their engineers.

What a stark contrast to my experience with MS. Trying to talk to the real engineers in a MS beta was an impossibility. The closest I ever got was a couple of product managers that were interested in what I was doing because I somehow managed to get a solution put together that integrated Active Directory, BizTalk, MS Great Plains, Commerce Server, E-Connect, and several other major MS server technologies. Apparently, my team was the first in North America, or even the world that actually got all the technologies to play nice with each other (interestingly enough it would have been impossible if I had not leveraged VMWare.) The attitude at MS on their betas, at least in my experience, was that it was a HUGE privilege to be invited, like getting to sit at the altar of some god.

All in all, MS runs a very opaque shop. In light of how much traction open source is getting, and what a refreshingly cooperative and community feel it has to it, the MS approach leaves one with a bitter taste once they have experience life on the other side.

What prompted me to write this post, is that just today I was working with one of our engineers, helping him to create a .Net setup project. This was something I had done a few years ago, and I remembered it as being pretty trivial. The challenge I was facing today, is that our engineer - who is a very bright guy, was struggling to put together the setup package. The MS Docs were next to useless, and when I saw what the MSDN has devolved to I was shocked at how hard it was to find good information on how to do the most basic of things.

What became clear to me today, and something I have been coming to understand over the past couple of years is this. Microsoft will never "get-it", it is a cultural thing and it starts at the top and ripples down to permeate everything at MS. What I mean by "get-it" is that MS just does NOT understand basics of human computer ( or anything for that matter) interaction. Their applications all seem to have been designed with a bottom up approach, where usability is bolted on versus built upon, their documentation is obtuse and hard to follow in any practical way, their UI's suffer from some significant usability issues, etc... Overall, I just see MS falling behind quickly, at least when it comes to the relevance (versus the dominance) of their technology.

I realize that is some pretty harsh criticism, and I am not saying I think MS is evil or puts out terrible software, I just think they are having a hard time embracing the innovation that is occurring around them, and they are out of touch with the evolving paradigms of developing usable software and products. The result is sub-optimal software and tooling.

I would be remiss if I did not mention a few MS products that I hold in high esteem. First, Excel, it is an amazing tool and incredibly powerful for what it is, it meets so many use cases and has a broad and varied user base. Second, SQL Server 2005 - amazing set of tools that do pretty much anything you want with a DB, their ETL and OLAP has some really nice tooling. Finally, Visual Studio, a GREAT IDE, that has yet to be matched by any other product I know of. Eclipse has quite a ways to go before it matches the functionality and utility of Visual Studio. I only wish I could build flex/air apps in Visual Studio!