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.
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 MIT Usability Guidelines simply state - "Site accommodates novice to expert users" without any real qualification of how to understand or evaluate this distinction.
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 User Interface Design Patterns, Jennifer Tidwell's UI Patterns and Techniques - and not forgetting Apple's Human Interface Guidelines of course).
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.
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 Word).
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 Desktop Search, 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 Lifestreams.
The possibilities it seems, are wide open.