I’ve spent too much time developing web applications recently, and getting fed up with the constraints of designing user interfaces on the web. Try imagining having to write Microsoft Excel for the web to run in Netscape, not using Java, and you’ll know what I mean.
So in order to compensate, I’ve been toying with some Windows application development, just for fun. And it struck me how Microsoft have always been really, really good at writing complete, solid UI widgets. From simple things, like the standard text entry field, or the menu widget that most application windows sport, to more complicated things like the file open dialog or the Excel spreadsheet.
This becomes apparent when you’re suddenly exposed to an application that doesn’t use the standard components, such as Netscape 6, or applications built on Java Swing, or even worse, Gnome. They just don’t work as well as Microsoft’s ones.
So what is it that makes Microsoft’s widgets better? Several things. They always allow for as many channels of interaction as possible: Normal typing, arrow keys, special keys, such as Alt-Backspace, arrow keys, shift-control-tab and other special keys, alt-shortcuts, cut, copy, paste, keyboard selection, mouse selection, moving selection, right click, drag and drop, animation, sound, you name it. They always display without flicker, something that makes them seem more robust. This is very basic, yet many widget developers overlook this factor. And they always have a professional, if boring, graphic design to them. It always shows when the graphic design of a widget isn’t done by a professional.
Now, the interesting thing, of course, is that none of Microsoft’s main applications use their own supplied standard widgets. Their toolbars and menus can be docked and un-docked. Their menus have icons in them. Their scrollbars have this little tooltip thing pop up to show you where you’d currently be scrolled to if you let go.
This is obviously easier for Microsoft to do than for any other company in the world, since they have the source code to the original components, so they can merely extend them, while all other companies will have to rewrite them. And when rewriting, you’re likely to introduce subtle differences that are going to present themselves as annoying inconsistencies in the user experience. Another exploitation of their monopoly power.
Bottom line is that it makes sense to invest heavily in these building blocks of the graphical user interface, since they’re going to be used in application after application. Microsoft is constantly evolving their widget library, cross-using it between applications, and they always keep the latest iteration to themselves, only gradually releasing them for third-party developers after they’ve been exclusive property of Microsoft for a year or two. Unfair, but clever.