Patterns of Flow and Responsive UI Design

Was lucky enough today to attend a talk by Ben Bederson, who presented his work on Interfaces for Staying in the Flow, and examples of software that he has developed in response to common usability problems. The concept of flow is familiar enough to anyone who has ever started working on something, gotten underway, and then looked up seemingly 5 minutes later, only to realise that 5 hours had passed, absorbed in productivity. In relation to HCI, flow is a major factor in the whether a user interface becomes a reliable (and fun) tool, or a frustrating and unwieldy distraction. From my experience, I have to say that the majority of software falls into the later category, which makes research and development in this area quite useful to take in.

  <p>One of the most difficult challenges in designing an interface that encourages 
    flow is to provide for the varying levels of skill and understanding of 
    users - encouraging beginners to explore and learn to use the tool, but 
    without alienating the more advanced users. Key requirements are that 
    the interface must keep users focused on the content or task domain itself, 
    and to try and avoid imposing situations that require short term memory 
    to resolve (humans are not good at this!). While the general common sense 
    and ubiquity of these ideas should be self-evident to everyone who has 
    spent time working with computers, it's very hard to uncover any concrete, 
    tangible elements that can lead to achieving this balance. Even the <a href="http://web.mit.edu/ist/usability/usability-guidelines.html">MIT 
    Usability Guidelines</a> simply state - <em>"Site accommodates novice 
    to expert users"</em> without any real qualification of how to understand 
    or evaluate this distinction.</p>
  <p>Of course, this led me to wonder about UI design patterns - do they exist? 
    Or, are they completely context dependent, as many programmers and designers 
    believe. I think the evolution of information architecture has shown that 
    there are certain emerging patterns in web design that provide a core 
    model for interaction with content based resources, but how far can this 
    be applied to more dynamic or transactional interfaces? While a huge body 
    of research and shared knowledge exists in the field of object oriented 
    design patterns (the code level), I've been finding it hard to comprehend 
    the scarcity of research that relates specifically to UI patterns (some 
    good examples being Sari Laakso's <a href="http://www.cs.helsinki.fi/u/salaakso/patterns/">User 
    Interface Design Patterns</a>, Jennifer Tidwell's <a href="http://time-tripper.com/uipatterns/index.php">UI 
    Patterns and Techniques</a> - and not forgetting Apple's <a href="http://developer.apple.com/documentation/UserExperience/UserExperience-date.html">Human 
    Interface Guidelines</a> of course). </p>
  <p>At a deeper level, I am starting to believe that the most significant 
    disruption to flow might actually be the graphical OS metaphor itself, 
    and its working mode of spawning a maze of windows and separated applications. 
    I can definitely recognize the success and value of having multiple specialized 
    applications (tools) that each perform one task very well - but I tend 
    to view the success of specialization as mainly derived from command line 
    applications - it's getting to the point where contemporary GUI applications 
    don't seem to contribute much more than just adding layers of bloat upon 
    bloat upon bloat. Perhaps customization is the best way to solve this 
    problem. But besides the desktop background, how many people actually 
    take the time to configure and customize their operating environment - 
    from setting icons to rearranging the application menu? The overhead involved 
    in this kind of tinkering is really beyond what most average users have 
    the time or skills to accomplish, and with almost all desktop/application 
    environments there is no straightforward path to move from default preferences 
    to a totally customized interface.</p>
  <p> I want to see integrated tools that do evolve and grow with the habits 
    and preferences of their users - tools where the advanced possibilities 
    are opened up through exploration and learning that begins at the most 
    simple level of usage. I don't want the developers of the application 
    to impose their definition of which options I use the most - I want the 
    application itself to respond to the way it gets used (as was pointed 
    out today - the worst offender in this area is the indomitable <a href="http://office.microsoft.com/en-us/FX010857991033.aspx">Word</a>).</p>
  <p>This approach opens up fascinating ideas for web applications, especially 
    with the rise of distributed computing. The interface could be concieved 
    as no longer tied to a particular software installation or machine, but 
    simply a collected set of properties and objects that have evolved with 
    the history of users interaction with the system, and accessible from 
    any compatible device with network access. With the emergence of the <a href="http://desktop.google.com/about.html">Desktop 
    Search</a>, Google is fast becoming the lowest common dominator (no, thats 
    not a typo) in this space, which starts to blur the boundaries between 
    an interface, a filesystem, and a distributed collection of resources. 
    Which leads me back to seriously re-considering flow based operating system 
    metaphors I previously assumed were far too wacky to really work, such 
    as David Gelernter's <a href="http://www.cs.yale.edu/homes/freeman/lifestreams.html">Lifestreams</a>.</p>
  <p>The possibilities it seems, are wide open.</p>