Sunday, February 23, 2014

Microsoft: Why do some technical people hate it so?

To be clear, I have been an active dis-advocate of Microsoft for a long time, but I do enjoy reading pieces from all points of view.

Recently Scott Hanselman wrote a piece called "Microsoft Killed My Pappy" Scott and I actually have a lot in common so I find his confusion a little disingenuous. It is true that over the years I've heard a lot about Microsoft and why it's so evil, and most of it just doesn't wash. Scott's comments are absolutely right about that: Most of the anti-MS arguments you hear just don't ring true.

He writes:
One person said that he was still mad about the Microsoft Anti-Trust thing. "Hey, 10 years ago Microsoft did this..." That was initiated in 1998 for actions in 1994.
And goes on to say, essentially "Even if there was a bad, anticompetitive, perjuring Microsoft way-back-when, there's nothing to fuss about now".

More data: I have friends who work there, and actually at least one of my old professors does as well. They like it. They have their own office (a rare perq in Silicon Valley), the housing is cheap, the stock options are nice, and their bosses do NOT belong in a Dilbert cartoon. There's much to like at Microsoft. I've been on campus several different times, and it's always made a positive impression. The MS vision of the future, with the model houses and cool tech are definitely inspiring. It's not like good, smart people can't like Microsoft.

That does not, however, mean that there isn't something fundamentally wrong at the company. I think there is, and it's taken me a very long time to be able to articulate it

My first encounter


One of the earliest times I remember having a twinge about Microsoft and sitting down to think about it was regarding the AARD Code.

At this time Microsoft and Digital research had competing (and completely compatible) versions of DOS. Companies could use either one, and all the software running on them worked identically. This was true for the "Win.exe" executable which, back then, was how Windows 1, 2, 3, and 3.1 worked: win.exe was just another DOS application.

The AARD code was a small chunk of machine language written into the windows executable that would detect which version of DOS was running, and if it wasn't MS DOS, it would (occasionally, through a random number generator) put up an error window with a meaningless error message. The user could dismiss it, and everything went along fine.

All the new code did was make a previously perfectly functioning part of Microsoft Windows code work a little less well by throwing up an obscure error message that the user had to clear.

Business-wise, it was brilliant:  System administrators would eventually notice that the error message only happened on DR-DOS boxes, and switch people over to MS-DOS for their windows boxes to cut down on the annoying support calls. Market-share increases, stockholders rejoice!

User-wise, it was awful: It gave the user the impression that the software was not running perfectly, and held up long-running jobs at random places because the user had to hit return to keep the process going, essentially making DR-DOS boxes running big programs to be constantly monitored.

This was a designed and implemented feature. At heart I am a Capitalist: I think it should be OK for competitors to get sneaky with one another, but somehow this was different. I tried to explain what I didn't like to a couple of friends, and they responded as I normally would: "It's a competition thing. It's cool."

But that wasn't what bothered me. Think about the effort required:
  • Someone had to write that code (in assembly language)
  • Someone had to test it exhaustively (it would be bad if it ever flagged a MS DOS installation).
  • They had to set up the flag in the build configuration system, because it was build-time configurable.
  • They had to write (and perhaps translate) the error message, making it just creepy enough to scare people without making it overtly obvious they were slagging a competitor.
  • They had to check that it would be legal. Because when you do something like this to a competitor, and you're as big as MS was even then, you always check with legal.
All in all, that's time from engineering, testing, ops, marketing, and legal departments that went into this one tiny piece of code. Probably half a dozen people plus a manager to get it out the door.

Different context, same thinking: font tech


There came a time, after Jobs left Apple, when there was a sea-change in the computing world. As is well known, Jobs had taken classes in calligraphy at his university, and he often talked about how that informed the ways that the font system of the Mac worked. They were, in apple tradition, beautiful on the screen. I have never owned a mac, but I acknowledge that for the 80s and a lot of the 90s, they were the leader in making fonts look good on a screen.

But then two things changed: Jobs left Apple, and MS poured a ton of money into research and development of subpixel positioning for their graphics engine and antialiasing fonts. The following version of windows was a complete leapfrog of Apple... Microsoft had taken the lead in this field.

And it was cool tech. It went in the rendering engine, not in the font itself, so when the code was run, everything, everywhere, looked great. It was a leap forward for all MS users and it worked for hundreds and hundreds of fonts, regardless of who made the font or what program used them. Almost. In fact, in all but one. One font which, regardless of whether IE, AutoCad, or Netscape Navigator requested it, would remain old-looking.

More research showed that this was entirely intentional: There was a conditional check in the code "If the font requested is such-and-such, do not smooth it". One font. Further checking by the press was that if you took the conditional out, the font smoothed just fine - it wasn't a problem with the algorithm or the font itself. In fact, some people just patched their machines to take the conditional out, and all was well. So why beat up this one font? It was the default serif font for one product: Netscape Navigator.

All the new code did was make a previously perfectly functioning part of Microsoft Windows code work a little less well by making one font among hundreds not render with the new engine.

Business-wise, it was brilliant. People would see, every day, that Netscape looked clunky while everything else looked great. Every day, some people would switch to IE from Netscape just because of eyestrain. Market-share increases, stockholders rejoice!

User-wise, it was awful: If you were someone who had specified that font in a document (say, for a quote in the middle of a Word document) then your entire presentation would look odd on the screen because the fonts were not rendered in the same fashion. In addition, any website that specified that font would render poorly. If you had designed your website using it, and your customer upgraded their OS, your website looked like crap whether it was in IE or Navigator.

As above, it's a change to the operating system: You have to code it, test it, get both code and test cases checked into the build system, and lastly check with legal to make sure you haven't made any promises about treating all fonts equally.

A pattern emerges


The examples I have given are (intentionally) very old, but according to direct experience and first-hand testimony, the mindset lives on:
  • Labor goes in so that a small amount of functionality comes out.

Microsoft is willing to put engineering and labor into things that make the user experience worse in specific and controlled ways. They are willing to take things that always work and turn them into things that don't always work. To most engineers I know, that is extremely offensive. To do it to your own user base in order to enrich yourself may be legally ok but is morally bankrupt.

The (current and continuing) pattern that keeps me from using Microsoft products at all (I have none in my house) is the evil triad:
  1. To increase shareholder value, Microsoft will
  2. engineer something into a worse condition than it started, at the
  3. expense of its own users
The fact that many of their users don't know it's happening (and thus don't care) has got nothing to do with my distaste for this practice. Nor does the fact that it's usually a relatively small burden. In my opinion, it's just wrong. I think a lot of other people feel the same way, even if they can't quite put words to it.

I don't think everyone agrees, nor should they, but Scott's puzzlement may belie a dearth of deeper investigation into the reasons people give, rather than an absence of reasons in the first place.