The checkbox: The mating call of the loser


(Cultural note: The phrase the mating call of the loser is a term of derision. I used it here to create a more provocative headline even though it's stronger than I really intended, but good writing is bold.)

When given a choice between two architectures, some people say that you should give users a checkbox to select which one should be used. That is the ultimate cowardly answer. You can't decide between two fundamentally different approaches, and instead of picking one, you say "Let's do both!", thereby creating triple, perhaps quadruple the work compared to just choosing one or the other.

It's like you're remodeling a book library and somebody asks you, "Should we use Dewey Decimal or Library of Congress?" Your answer, "Let's do both and let the user choose!"

Imagine if there were a checkbox somewhere in the Control Panel that let you specify how Windows XP-styled controls were implemented. Your choices are either to require applications to link to a new UxCtrl.DLL (let's call this Method A) or to link to COMCTL32.DLL with a custom manifest (let's call this Method B). Well, it means that every component that wanted styled common controls would have to come in two versions, one that linked to UxCtrl and used the new class names in its dialog boxes and calls to CreateWindow, and one that used a manifest and continued to use the class names under their old names.

#ifdef USE_METHODA
 hwnd = CreateWindow(TEXT("UxButton"), ...);
#else
 hwnd = CreateWindow(TEXT("Button"), ...);
#endif

DLG_WHATEVER DIALOG 36, 44, 230, 94
STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU |
      DS_MODALFRAME | DS_SHELLFONT
CAPTION "Whatever"
BEGIN
#ifdef USE_METHODA
    CONTROL         "Whatever",IDC_WHATEVER,"UxButton",
                    BS_AUTOCHECKBOX | WS_TABSTOP, 14,101,108,9
#else
    CONTROL         "Whatever",IDC_WHATEVER,"Button",
                    BS_AUTOCHECKBOX | WS_TABSTOP, 14,101,108,9
#endif
    ...

At run time, every program would have to check this global setting and spawn off either the "Method A" binary or the "Method B" binary.

Now you might try to pack this all into a single binary with something like this:

if (GetSystemMetrics(SM_USEMANIFESTFORSTYLEDCONTROLS)) {
 hwnd = CreateWindow(TEXT("Button"), ...);
} else {
 hwnd = CreateWindow(TEXT("UxButton"), ...);
}
...

if (GetSystemMetrics(SM_USEMANIFESTFORSTYLEDCONTROLS)) {
  DialogBox(hInstance,
            MAKEINTRESOURCE(DLG_TEMPLATE_WITH_OLDNAME_CONTROLS),
            ...
} else {
  DialogBox(hInstance,
            MAKEINTRESOURCE(DLG_TEMPLATE_WITH_UXCONTROLS),
            ...
}

But it's not actually that simple because a lot of decisions take place even before your program starts running. For example, if your program specifies a load-time link to UXCTRL.DLL, then that DLL will get loaded before your program even runs, even if the system switch is set to use Method B. A single-binary program that tries to choose between the two methods at runtime will have to do some activation context juggling and delay-loading. Hardly a slam dunk.

Okay, so now you have two versions of every program. And you also have to decide what should happen if somebody writes and ships a program that uses Method A exclusively, even when the system switch is set to Method B. Does everything still work within that program as if Method A were the system setting, while the rest of the system uses Method B? (If you go this route, then you've completely undermined the point of Method B. The whole point of Method B is to allow programs that rely on specific class names to continue working, but this rogue Method A program is running around using the wrong class names!)

Now the entire operating system and application compatibility work needs to be done with the checkbox set both to Method A and to Method B, because the compatibility impact of each of the methods is quite different. Okay, that's double the work. Where is triple and quadruple?

Well, the two different versions of the program need to be kept in sync, since you want them to behave identically. This can of course be managed with judicious use of #ifdefs or runtime branches. But you have to remember both ways of doing things and be mindful of the two method each time you modify the program. Somebody else might come in and "fix a little bug" or "add a little feature" to your program, unaware of how your program manages the shuffle of Method A versus Method B. The mental effort necessary to remember two different ways of doing the same thing plus having to expend that effort to correct mistakes in the code, that's the triple.

The quadruple? I'm not sure, maybe the ongoing fragility of such a scheme, especially one that, at the end of the day, is a choice between two things that have no real impact on the typical end user.

Engineering is about making tradeoffs. If you refuse to make the choice, then you're taking the cowardly route and ultimately are creating more work for your team. Instead of solving problems, you're creating them.

All because you're too chicken to make a hard decision.

Comments (33)
  1. Jim Lyon says:

    At a previous employer, the common line (spoken in jest) was: "If you can’t decide which way to do something, make it an option. Then you can yell at the customer when he sets it wrong."

  2. Rob H says:

    The quadrupling happens six months in the future, when you add another checkbox that somehow interacts with the first one, and now you have a 2×2 matrix of configurations to develop and support.

  3. henke37 says:

    Uhm, the suggestion box no longer takes comments, do you still want more suggestions?

    [Read the last paragraph of the suggestion box article. -Raymond]
  4. Jim says:

    Good question Ray, let me stretch a little bit. Can we make a choice before we get into the window for the operating system? Can MS let us choose between the XP and Vista? Obviously not, and the problem is what you have described. But between the Marketing Depart and the Engineering Group, we are playing those chicken games too often. It really comes down to the leadership of the respect departments.

  5. Mike Dunn says:

    A product I used to work on fell into this trap. When the spec owners couldn’t decide if it would be a worthwhile feature to do X for the user in situation Z, we ended up showing a "Do you want to do X now?" message box. Even if Z was very common and X was something you’d do 10% of the time.

    One time, I searched the code base for MessageBox and there were over 200 instances. They weren’t all Yes/No questions, but still…

  6. keithmo says:

    A similar topic was covered by Bruce Schneier (I don’t remember which book) on the selection of crypto algorithms. The attitude he expressed can be summarized as "if you’re not smart enough to choose the best algorithm, how can you expect the end user to be smart enough to choose one?".

    Of course, life’s not always that simple, but I like the general idea.

  7. Chris Hanson says:

    Why do I suspect this has to do with the failures I document in "Why is CS_DROPSHADOW a class style and how do you use it with a Dialog/DlgProc?"

    http://xenon.arcticus.com/why-cs-dropshadow-class-style-and-how-do-you-use-it-dialog-dlgproc

    I’m sure this crowd will find it entertaining and enlightening.

  8. Jodie says:

    @Jim:  Yes you can make that choice, it’s called dual boot :)

  9. IgorD says:

    I spend most of my time on Macs (and make most of my sales on Windows) so I really hope that Windows 7 will move in the right direction.

    My opinion is that Windows would be so much better system if it had better defaults. I need to do like 5 customizations on a fresh copy of Mac OS X before I can start comfortably working with it. Setting up fresh Windows installation is not that simple. Far from it.

    I’ll never understand who needs autoplay on USB thumb drive (or any other rewritable device) and why I can not eject it via keyboard or Eject command on contextual menu?!

  10. @IgorD says:

    @IgorD

    To be true I need to do some customizations to OSX and it doesn’t allow me to do them!

    It is the least customizable OS in the world (and I really can’t figure out what people find good in it).

    Anyway, I can’t stand an OS which forces colors on me.

  11. @@IgorD says:

    @@IgorD

    I same way I can’t stand Aero that forces blue everywhere on me. I heard "the next version of Windows will fix this" though.

  12. fred says:

    @Chris Hanson

    I don’t see any link between your article on CS_DROPSHADOW and this blog entry, but I did read it.

    I didn’t get the question as to why a drop shadows would work with child windows, or should be window style.  It’s all logical for me; normally all windows of class would behave the same way — otherwise you should create a new class — and of course it’s for popup/overlapped windows.  That’s the whole point of the visual cue, the fact that they’re overapping.

    In fact you erred in trying to implement a "popup panel" with a Child style.  You’re even describing it as working like Combo.  These windows need to be WS_POPUP so they do not become clipped by the parent.  That’s just the way these things are done; menus, popup widgets, the list of a combo box, tooltips, etc, they are all WM_POPUP and that’s how we expect them to be, that’s the goal of the style.

    I think the whole trying-to-force-it-to-use themes part is a little too hack-and-slashery for me, thank god an eventually saner solution prevailed ;-)

  13. Oh, man, this reminds me of the top salesman in a company I used to work for (systems automation/integration – we did the large, expensive custom jobs that none of our competitors wanted to do).

    I tried to explain it endless times over my 8 years with the company: if you have 99 situations that require one set of logic, but one situation that requires a completely different set of logic, then you have *more than doubled the complexity*!

    He never got it.

  14. acq says:

    I have one good counterexample for "When given a choice between two architectures". "Architectures" in a big sense, not in "one check box", of course:

    I’ve just read that Windows 7 will not have the classic Start menu and taskbar. In Vista, even if it managed to spread Control panels to unexpected location, the users who already have hardwired how to do things were able to do so by switching Classic mode on. Windows 7 will make necessary new learning and training for all people who already know how to do their daily jobs. I guess that millions of people will waste in summary immense amount of money and time just to reach the point to do that what they anyway efficiently did up to now. That will maybe help Windows users to really reconsider Mac, (and as the added benefit it wouldn’t at least randomly forget the placements of icons and wouldn’t come in the number of versions adjusted for extortion).

    It seems now "The MSDN Magazine Camp" won over "The Raymond Chen Camp" (as Joel calls it: http://www.joelonsoftware.com/articles/APIWar.html) even regarding user interface. Now Joel’s article can be easily adapted, all with the section titles:

    How Microsoft Lost the UI War

    * Developers, Developers, Developers, Developers

    * Why Apple and Linux had problems increasing user base

    * The Two Forces at Microsoft

    * Microsoft Lost the Backwards Compatibility Religion

    * Automatic Transmissions Win the Day (Windows 7 is "I have to learn to change gears for that damn thing after all these years of driving cars with the same gear logic")

    * One UI To Rule Them All

    * It’s Not 1995 (context is not the same for switching from 3.1 GUI to Win95 (which can hardly be called a GUI) and from classic to win 7)

    * Enter Mac and Linux

    * Am I a Little Bit Sad About This

  15. Joseph Koss says:

    Re: keithmo

    There are plenty of cases where the end user knows his needs better than you will know his needs. Your cryptography example is actualy a rather good one, although maybe not exactly in the terms you are probably thinking.

    Sure, between two stream cyphers that take N-bit keys, its probably best to pick one for him.

    But you might want to also allow him to use a one-time pad, which is a paradigm shift.. he knows better about when to apply such a shift than you ever will, because such things are highly situational.

    A one-time pad cannot ever be default behavior, because every use weakens it. Just the same, when used properly the one-time pad is the strongest encryption that will ever be available.

  16. @acq – and guess what else!  It won’t have Program Manager or File Manager either!  Dang!  How are people ever going to learn how to live without them?  Why can’t Microsoft just build a perfect interface and then leave it alone?

  17. asf says:

    @Chris Hanson:

    um, you know you can set the dropshadow on any random window of any class with SetClassLong? (i’m sure its not really the way you are supposed to do it, but it works)

  18. NONAME00.CPP says:

    "Why can’t Microsoft just build a perfect interface and then leave it alone?"

    Yes, you’re right as in you cant make it perfect. But maybe more people in the windows team should take Raymonds advice and grow a pair. i.e. Stop caring about broken apps which leads to lame design compromises.

  19. SRS says:

    I want to also add:

    • The world does not need another scrollbar.

    • Your non-standard menu bar will be as ugly and non functional as you are.

    • Asking me to chose a different theme or skin is like asking me to choose between boils, leprosy and syphilis.

  20. Anonymous Coward says:

    acq, that was a really depressing article.

  21. The M says:

    <i>Engineering is about making tradeoffs. If you refuse to make the choice, then you’re taking the cowardly route and ultimately are creating more work for your team. Instead of solving problems, you’re creating them.</i>

    The shortest possible explanation of "Why Linux sucks".

  22. Dean Harding says:

    @acq: "That will maybe help Windows users to really reconsider Mac"

    Eh, so rather than just training on the new* start menu when these user switch to Windows 7, they’re instead going to switch to Mac – where they’ll have to train on ABSOLUTELY EVERYTHING… right.

    * It’s been around for 8 years now, so it’s not all that new

  23. ironic or not? says:

    "Imagine if there were a checkbox somewhere in the Control Panel…"

    Does it exist or not?

  24. Falcon says:

    asf writes: "(i’m sure its not really the way you are supposed to do it, but it works)"

    Pop quiz – what’s a popular theme in this blog?

  25. Drak says:

    @@@IgorD

    Aero does not force blue… Mine is set to black, thank you very much.

    @Miral

    Why do you need to start so much from your Start Menu? I have only 13 items pinned to it, which is enough for me at work. At home I have even fewer items pinned.

  26. Miral says:

    While I agree in principle, some things (especially in the UX realm) really do need that checkbox.

    While I love the type-in box in the Start Menu in Vista, for example, I would much rather have the flyout menu monstrosity from XP and before for the All Programs menu instead of the treelike monstrosity in Vista.  (Yes, it’s multi-column and gets messy quickly, but I can rearrange it as needed and positional memory and sorting makes it really quick to get to things.  If Vista *didn’t* have the type-in box, it would be utterly unusable.)

    But someone, somewhere, decided for the XP-style menu to go away entirely, leaving the only choices between W2K style and Vista style.  And I want to wap them onna head.

  27. Dog says:

    @Miral: If Vista *didn’t* have the type-in box, it would be utterly unusable.

    That’s the idea. The "All Programs" list in Vista was intentionally crippled in order to make you dependent on search. Of course nobody at Microsoft will ever admit this, but its the only reasonable explanation I’ve ever heard.

  28. James Schend says:

    There’s a lot of crap flying around in these comments…

    First of all, it constantly amazes me how many technical people (or at least self-labeled "technical people") are afraid of any kind of change, even when the change is absolutely, measurably, better. Yes, the Office 2007 interface is different, get over it already– the new design is simply better all-around. Yes, the Start menu changed, it’s also better. Cope with it already and stop the whining. Change is good.

    Secondly, saying that people will switch to Mac because they have to re-learn the Start menu is moronic; on a Mac, they need to relearn *everything*. Hell, even the way the up-arrow and down-arrow work in text fields is different on Macintosh! (And don’t get me started on the Mac difference between "Enter" and "Return", which even Apple seems to have given up on by this point. A shame.)

    The M: It’s half the explanation of why Linux sucks; the other half is that Linux users, generally, don’t even bother to do the "more work" that their options generate. (Except in a completely random ad-hoc fashion.) It’s not like they add the "additional window style" checkbox, then add a whole grid of test-cases for it– instead the guy who put it in just kind of runs a few apps maybe and if it looks sort of slightly right he rubberstamps it. There are good open source projects, but they are too few and far-between.

  29. Friday says:

    James Schend,

    You just made your mating call.

    Can you prove it’s better?

    I thought so.

  30. Neil (SM) says:

    Find Setup Wizard

    Before you can use Find, Windows must first create a list (or database), which contains every word from your help file(s).

    [x] Minimize database size (recommended)

    [ ] Maximize search capabilities

    [ ] Customize search capabilities

    [That’s a fantastic example of the loser checkbox. I wish I had remembered it when I wrote the article. -Raymond]
  31. acq says:

    Aaron: "Why can’t Microsoft just build a perfect interface and then leave it alone?"

    Try to look from the point of view of the real users (in real companies). Companies don’t install "latest and greatest" as soon as MSFT publishes. Windows 2000 was still installed on the new computers in my company until around 3 years after the XP appeared. In between a lot of bugs were actually fixed. Still the "classic" look made the transition easier. Now by dropping the "classic" the thing that works is dropped and the "new and untested" forced to the unwilling users. Again, not all users are kids who don’t have anything else to do than learn anew how to do something that was a built in reflex before.

    I still consider the attitude "we current managers/developers are so smart that we’ll drop the old functioning things to introduce something new on which the people will eventually get used to and which will eventually be bug fixed" very, very wrong. That attitude apparently destroyed Netscape:

    http://www.joelonsoftware.com/articles/fog0000000069.html

    At these same times MSFT prospered, keeping the same interfaces for Office and Windows. And now it came to the point that the latest Ubuntu and Open Office are easier to be used by "classic" user than Win 7 and Office 2007. That Open Office can do Basic and that MS Office can’t (on Mac). And seeing that the guy who removed File menu from Office leads Windows all the results don’t surprise me.

    Now a lot of that "it’s slower" perception of users (how Vista was seen) is:

    a) Because the user *are* actually slowed down — they spend much more time and energy

    b) Because the product is made to "look good in the presentation" — all these transition effects! Transition effects are OK when you look at the movie and you gave up the next two hours to always "wait and see what comes next."  They are also good on tests of "new UI" since when the UI is new nobody knows what it is doing. But when you work with the computer you *know* what comes next (except the first time you try) and any animation which show "nice" phases between what user initiated and the final result induce of perception of "slowly happening." A lot of visual cues "designed" for new products are wrong. They do look good in the presentations, however.  As Raymond would say "I bet a lot of people are looking to get a really nice bonus for all that." The Emperor is naked, but it still doesn’t come to his head. Oh well…

    There should be one main checkbox in Windows Wow effect — wow starts now."  Tha would be the "mode for bonuses for MSFT managers and developers and for fanboy excitement." Turned off, it lets people do their jobs with as little fuss as possible. Both modes should be configured fully independently.

    I’ve recently received a brand new (Core 2 2.1GHz) notebook. I started using Vista and it simply appeared slow, slow, slow! I didn’t have to measure it but it appeared slow even in the "maximize performance" mode. Then I sit in front of my 2002 notebook (AMD 1.4 Ghz) with XP — it just feels faster — the response is immediate, simply not so on Vista. I believe that people in MSFT used Vista so long that they forgot how it looks like using XP (or even traditionally not optimized enough, that is, compared with classic Windows, Linux for that matter, one more thing probably not allowed among the "omg were’re so smart" MSFT managers).

  32. @acq:  the joelonsoftware reference is about something completely different.  Code wasn’t thrown away here — it evolved.  

    Re the point about latest/greatest – I understand where you’re coming from.  I’ve seen lots of companies deploy a newer version of Windows and make it look like a one or more versions back because they’re concerned about retraining.  However, their employees are usually buying computers with the current version of Windows and most likely sticking with the default interface (it’s easier to use for one thing), and so they’re learning it on their own time.  And then the work computer is a PITA because it uses the older, inferior interface.  Keeping AND MAINTAINING older code involves a lot of risk, and sometimes that risk is not worth the marginal benefit.

Comments are closed.

Skip to main content