All Microsoft products apply VendorLockIn, at various levels. These lead to general philosophical design or feature patterns of Microsoft products and tools that one finds UserHostile, sadistic, and show-stopping. '''IIRC I inaugurated this page. But the list of gripes have more to do with clumsy View protocols than VendorLockIn. I was talking specifically about dirty tricks, like MicrosoftFoundationClasses burying ''main()'', and coupling everything to everything else, or ASP.NET refusing to serve a web page as raw text. (DeveloperTest''''''ing once was less important than today.) All these seeming "mistakes" are instead deliberate decisions to force you to use _all_ of a product, if you use _any_ of it. Lock-in. -- PhlIp''' The MS-Gripe(TM) world is simply larger than you thought. Feel free to list the others. ---- * I'm not sure we can attribute all of them to VendorLockIn. Some of them may be because the sheer size of MS, or perhaps a corporate habit unique to MS carried over from its earlier days. Perhaps we should move speculation on the reasons for the behaviors to another section or topic. "...So after more than an hour of craziness and making my programs list garbage and being scared and seeing that Microsoft.com is a terrible website I haven't run Moviemaker and I haven't got the plus package...The lack of attention to usability represented by these experiences blows my mind..." -- BillGates There are topics on specific product complaints, such as ThingsWeHateAboutVbClassic and MicrosoftAccess, but this is about '''general tendencies''' found in multiple products. * '''Auto-guess and Auto-fill''' (Sometimes called "smart" options) ** Example: The other day I was keying in some data classification codes to a MicrosoftAccess table. Microsoft starting automatically sequentially typing numbers. I almost didn't notice and would've had bad data. I've seen this kind of behavior in Word, but as a default for a data tool, it's frightening. ** Example 2: In Windows Explorer file listings, sometimes it appears to use alphabetic sorting and sometimes numeric sorting and sometimes even a combo if the styles are mixed. (I have not figured out the exact rules yet.) It appears to guess sorting intent based on the names. It's great if it guesses your intent right, but can confuse the crap out of you if it guesses wrong. * '''Excess or Unnecessary Integration''' - This is where MS includes a nifty feature, but it is tightly coupled with their own OS or products. It's often suspected they are doing this to either sell their other products or to make it harder to clone their products. ** Example: * '''Convoluted Syntax''' - Microsoft languages tend to add convoluted syntax over time. ** Example: "Classic" Visual Basic was famous for this and it looked like they were going to clean it up with dot-net. However, odd syntax seems to be creeping into dot-net also, such as [to be added]. * MouseScriptDisconnect, perhaps a form of rejection of PowerOfPlainText. * '''Missing "Obvious" Features''' - Microsoft products frequently have "holes" in capability that suggest their developers don't use their own products. (this is a controversial 'philosophy'? suggest rename: Release Before Ready, Don't Eat Own Dogfood... something along those lines) ** Example: MicrosoftAccess did not (and perhaps still doesn't) provide any means to determine which directory the active .MDB is loaded from. I.e., there was no conceptual equivalent to CeeLanguage's argv[0]. This made it difficult and awkward to bundle external resources (e.g., image files, text files, etc.) along with an .MDB intended for access by the scripts embedded in the .MDB. ** Example 2: Cannot change text code font in SQL edit-box in MS-Access without a registry hack (at least versions up to 2003). The default font is proportional, so it makes it hard to format SQL code. Some people also find the font is difficult on the eyes. ** Example 3: Microsoft's file search utility in XP ignores the contents of many non-Microsoft products. To restore such capability, one has to change the registry, among other steps. ** Example 4: If a web-page uses a JavaScript window "close" function, in IE 7 it prompts for closure verification (yes/no) as a security measure. IE 6 didn't prompt. So now all these applications are burdened by this dumb repetitious prompt that worked fine under IE 6. When they added it, they should have provided an easy way to disable it for specific web-sites, or at least for everything. The prompts should give the option something like, "Do not prompt for this web-site again". It's as if they never test their stuff, or just don't care. *** Unfortunately in this case the lack of a confirm prompt proved to be a terrible security hole. The behavior had to change. *** ''FireFox never prompted, although I haven't tested the latest.'' ** No straightforward way to make relative paths for Linked Tables in MicrosoftAccess, which is a common need when breaking big projects into smaller ones (because the Object Browser is not meant for high quantities). Thus, when you move a version from test to production, you have to manually link the tables. Splitting the code from the data is also a common practice, and a reason to have relative links. ** ''You need a table link manager to automatically and manually establish & restore links. My company wrote one, way back when, and used it for over a decade.'' * '''Lack of Logging and/or Poor Error Messages''' - All too often, Microsoft products fail silently or with vague or insufficient detail to track down the source of a problem. ** Example: I received a message during an install that said, "Windows could not install component". It did not tell me why it couldn't install it, nor which component it was. It was barely better than "Something is Wrong". Ideally there would be a "Details" button that would launch a window with technical information, such as the file name of the conflict, etc. ** '''Q:''' Wouldn't 'Fail Silently' (possibly stemming from: don't expose users to errors) be more along the lines of a 'controversial philosophy'? I can't see vague messages being promoted directly - error handling is '''really hard''' to do well, so poor error messages might be more a result of prioritization: '''(1)''' make it work right before you make it break right, '''(2)''' to reduce costs, only do half the job. ** '''A:''' ''Huh?'' ** "Lack of Logging" sounds like a '''philosophy''' to you? It sounds like a ''complaint'' to me. But 'Fail Silently' and 'Don't expose users to errors' are philosophies that might lead to 'Lack of Logging'. * '''Proprietary File Formats''' - File formats are frequently closed, and/or obtaining official documentation is inordinately expensive. * '''Closed Source''' - Closed-source software is like buying a car with the hood welded shut. * '''Interface Bigotry''' - MS often has a standard screen or interface for doing a given task. If you try to do something similar outside of that "official interface", you often have to think like a hacker to achieve it. * '''Poor Documentation''' - Documentation intended for developers is frequently missing, inadequate, error-laden, or demonstrates questionable practices. ** Example: In MS-Access, some functions only work in SQL (Jet engine) and some are part of VBA but also work in SQL. It's hard to figure out which is which and difficult to find documentation on Jet syntax. ** Example: the online "documentation" for DirectShow, a component of DirectX, was marked "preliminary" for years. Then one magical day it was all marked "obsolete". Screw Microsoft with a splintery axe handle. * '''Form Over Function''' - Eye-candy frequently disguises the fact that the underlying functionality is at best marginal, and at worst buggy or incomplete to the point of being unusable. * '''Menus are too deep''' - See GooglifyDeepMenus. * '''Double Death''' - Microsoft stops improving products once their competition is dead or not a threat. * '''Fixed-size Dialog Boxes''' - Microsoft products often display a listbox the size of a postage stamp in a modal dialog box, with the right-hand content obscured and no horizontal scrollbar or ability to resize the dialog box. ** Example: A set of listbox options like "Accounts Receivable - Aged Balances", "Accounts Receivable - Outstanding Accounts", "Accounts Receivable - Account Listing" turn into three instances of "Accounts Receivab", with no means to distinguish one from the other. ** Example in Windows XP ''fl.'' Windows 8.1: the provided dialog box for setting environment variables is fixed-size and contains a grid of name/value pairs. The provided space isn't even enough to show the full processor ID, let alone the search path. To see it in full, one has to grab the right-hand edge of the value column's header, drag it off to the right (remembering that the dialog box doesn't resize, only the column) and then use the horizontal scrollbar the table has gained to move back and forth. Or select the cell, copy its contents, and paste it into something else where you can read it. If you want to ''edit'' the value, you get another dialog box with two text fields and a couple of buttons. Nothing can be resized here. * '''Toolbar Land-grab''' - Microsoft products frequently display a festoonment of toolbars which irritatingly encroach into the document area. ** Example: In Microsoft Word, I want to look at my document, not at the 209,249,482,309 different actions I can perform on it. Of course, I ''can'' turn off the toolbars, but it's reflective of Microsoft philosophy that their default toolbars and their default interface is more important than my document. Make the actions appear and disappear when I slide the mouse pointer over ; don't try to make me stare at them. *** There is the issue of discoverability. What's needed is a system-standard text-only toolbar with actions grouped under headings. As a bonus, keyboard shortcuts could be listed next to each action. * '''Case Insensitivity''' - This is one of the few that I like. * '''Scatter App Config''' - Application and application configuration information is scattered all over the place, making it hard to make backups or automated batched updates. Perhaps this is to reduce pirating, but it also makes routine IT staff work difficult and expensive. * '''Bump-and-Jump GUI''' - It's too easy for a stray mouse-stroke or key sequence to move a folder, item, record, tool-bar, etc. into nowhere-man's land without any warning. These kinds of things fill up the help-desks for hours as they help users find stuff. ** Example 1: In Windows Explorer if you press the mouse button a little too soon, you can drag a folder into an adjacent folder without any warning. ** Example 2: In MS-Access, page-down in some places takes you to the next record instead of merely scrolls a text-area box. If you are not alert, you will be editing the wrong record. ** Example 3: Visual Studio IDE. Users accidentally undock a toolbar or frame with no option to undo. This occurs almost daily. * '''Divorced Controls''' - Ideally the option or button to fix or change a given GUI object should be ''on'' the GUI object itself. However, Microsoft tends to separate them so that the adjustment option is in some far off menu or dialog box. It's like the oven temperature control being on the vacuum cleaner. ** Example: I usually don't like the abbreviated forms of menu pull-down lists. This is where only some of the menu options are shown, but with a double chevron (">>" pointing down) to see the rest of the options. There's a (convoluted) way to turn this annoying feature off (and back on), but its not part of the menu interface itself. A tiny "menu options" link or icon could have been part the menu or chevron bar. ** Example 2: MicrosoftAccess 2007's option to switch from tabbed to MDI object viewing is deep in the Office menu (the round thing with alien markings in the upper left). It should be in the pane itself. * '''GUID's''' (Globally Unique Identifier) - A good idea on paper, but requires managing a large scope. This is perhaps a form of VendorLockIn in that you invest in MS's global ID management and name-space to pull it off. Global-within-scope-X gives one the flexibility to leave servers or vendors because the ID name-space is not tied to anything outside of X. ---- ''I think [integration and convoluted syntax] need examples. Also, can you show that other languages have '''NOT''' added convoluted syntax over time? (Like, go ahead and try to make that claim about Java!!! ;-)'' * [What's "convoluted" about Java that isn't equally true of other C-flavoured languages? Arguably, its syntax has become, if anything, ''less'' convoluted over time with the introduction of anonymous inner classes, for-each loops, and automatic boxing-unboxing of primitive types.] ---- How about... * Make a product that meets the needs of 80% of the marketplace. Don't worry about the rest. ** LeftHandedSyndrome perhaps. ** Or AllRoadsLeadToBeeMinus perhaps. ------- '''Miscellaneous Quotes''' "MS's problem is that they hire people who like puzzles instead of people who prevent them." (Referring to their interview strategy) "Using MS pays the bills, but you feel the need to shower afterward." "Microsoft takes care of the details for you, even when you don't want it to." ------- '''Stupid Excuses to "Require" Upgrade''' I had the simple "clock" widget on my Windows 7 desktop for about 4 years. One day recently it stopped showing up. I opened up the standard "gadget" dialog to re-enable it but it didn't work, without any message. After rebooting and fiddling, I Googled around and came about this: http://windows.microsoft.com/en-US/windows/gadgets Paraphrase: "Windows 7 gadgets (such as the clock) are no longer supported because they are insecure. To get secure alternatives, upgrade to Windows 8.1". A fucking clock is "insecure" and not easily fixable? Jesus Greedy Christ! If you cannot make a clock secure, why should we trust you to make an OS and cloud secure? ''This calls for the same splintery axe handle mentioned above.'' Another example: it's often difficult to get ASP classic to display error messages. Often it displays a general system error instead of a programming error message (error number, description, line number, etc.). There are various tweaks to get better error messages, but they are hit and miss and sometimes require rebooting a production server (if you can't recreate the error on a test copy). MS doesn't want to make ASP classic easy because they want to you use ASP.NET and buy Visual Studio. They can claim they "support" ASP classic, which is technically true, but make you pull your hair out if you do. (A related oddity, it's more likely to display a real error message in FireFox than IE.) ------ What's with the fat avatar (portraits) of late? If an org doesn't use them, then you get that generic gray Fisher-Price-toy profile all over the place wasting space. Microsoft wants to be Facebook? ---- CategoryMicrosoft