User Instrumented Api

 One of the great new ideas of the 21st century. In a UserInstrumentedApi, users 
 measure every widget with calipers, and email complaints about their sizes 
 directly to developers' home email addresses. -- DougMerritt


A common AntiPattern one commonly finds in the "design" of user interfaces, and/or other interactive systems. The UserInstrumentedApi is a seductive technique, which programmers just love, because it's powerful, easy to do, and doesn't require much in the way of considering the user's needs, workflow, etc.

Simply take the programmer API (or WireProtocol?) to some subsystem, wrap a thin veneer of UI on top of it (so that users can drag and drop and click and point their favorite commands, rather than having to write code), maybe add a few keyboard shortcuts or other (ahem) SyntacticSugar (?!?), and call it good. No need to wrap all of the API calls, just ones which are obviously public.

Voila! The user now has the same power, theoretically, as the programmer. (Or as a CommandLineInterface - command shells already provide this sort of functionality).

Not.

It's a fun bit of ThreeStarProgramming, a particularly pleasurable form of MentalMasturbation, and looks great on the resume. Clever programmers will use MetaProgramming and/or introspection to do this for them automatically - change a class to add a method, and the UI widget for that class changes automatically, too! Of course, for those shops that prefer their apps programmers not dabble in such domain-independent diversions, many tool vendors will provide programs which do all the dirty work for you, and package it up in a nice box with a pretty bow on top. Some even will tell you that it's an honest-to-goodness programming paradigm.

But what results from this technique is a UserInterface which is invariably UserHostile, ugly, inefficient, and a royal pain in the ass to use.

Reasons why the UserInstrumentedApi is generally a baaaad idea.

Examples


And now, the disclaimer

And now, a bit on the difference (where it exists) between this and DirectManipulation. Many consider the latter (NakedObjects and such) to be a rather advanced UI paradigm - whereas this page is making the bold claim that the UserInstrumentedApi is an AntiPattern.

From outward appearances, it looks as though the two pages are describing the same thing.

They're not, at least not in the general sense.

DirectManipulation interfaces (where the user has a rather large bunch of objects, and can manipulate them in numerous ways - often selectable from a menu, palette, or other such mechanism) are useful when:

--

That seems to make sense. A few points though:


maybe an AntiPattern

SeptemberZeroFive

CategoryUserInterface


EditText of this page (last edited February 7, 2007) or FindPage with title or text search