Friday, 19 September 2014

Don't cross the streams

One of the rudest things any program can do is to unpredictably jam its output stream into the operator's input stream.  It sounds like such a basic and obvious no-no, but it is astonishing how many pieces of software fail this basic etiquitte test.  'Stealing focus' is just the most common example, but in general anything that breaks your flow is a candidate.  The machine should only alter your behavior in cases where something critical depends on it, and so the fault here is that whoever designed the program has an inaccurate sense of what's actually important to you, and when it's important.

This is one argument for radically reconfigurable computing systems, but leaving that aside I often cannot fathom what thought process somebody went through to decide that it was worth interrupting my flow for something.  Or maybe they just didn't test the damned thing enough -- programmers should always have to eat their own cooking every day for a month before they even think about releasing it on an unsuspecting public.

The point is that output alters the user's behavior, and you only want to do that if the user is currently behaving inappropriately.  Superfluous output is wasted cycles on both the machine and user side, and the further sin of shoving that output directly in the user's active input stream is shitting where you eat.

(Addendum: A more insidious version of this is anything that assumes you want information dumped in your face, rather than waiting for you to tell it so.  This is why google.com is a nice interface while facebook.com is a rude one.  Also why all phones should come with a person-by-person ring setting, i.e. I want my phone to ring when my sister calls but not when my creditors call.)

No comments:

Post a Comment