How many different ways can you think of for navigating, selecting and manipulating a rich ocean of information? Odds are you're now wondering how the data is structured. Is it a number, a list, a table, a hierarchy, a graph, a set, a formula, a diagram, a photograph, a description, a definition, a summary, an essay, a book? Who's the information for? What does it mean? How is it used? Or maybe you're just one of those types who dreams about flying through cyberspace...
The presentation of information must take into account its content, its form, its context, its provenance, its audience, its purpose. A hundred decisions must be made before information is rendered concretely for consumption and for interaction. This process is extremely tedious, fickle and costly so it had better yield an effective product or the effort is wasted!
Back to Software
Each and every software application is a tool for manipulating information. Consequently each one embodies countless assumptions, decisions and tradeoffs concomitant with the management and production of that information in that context. Typically a team of Architects, Domain Experts, Product Managers, Engineers, Clients, and Users have worked very hard to define the logical data model that represents the information content of the application, describe the stories to be captured, lay out the User Interface, specify the actions to be provided, and developing a strategy to persuade and cajole stakeholders to support and use the project by pandering to their information needs. Software design is all just about information!
But It Goes Wrong...
And lo' the Engineer said, "Let there be a Tri-State Tree on thy file system chooser for it hath Tree-nature." And the User saw it and righteously complained, "But I want to backup 6 files scattered across my hard disk and network file shares. This Tree is too deep for me to find them or to verify my selections when I am quit with them! Why can I not put my files in a List?" And the Engineer replied, "Because that would take an extra 6 weeks. Wait for version 2."
This dialogue bothers me. I have had this very complaint about numerous applications including file managers, backup tools, music players, and IDEs. I was reminded of it by Rezlaj's comments on Ayende's recent Tree post (though it sounds like Ayende's use of a Tree is perfectly justified here).
It's easy to complain about the lack of foresight on the part of the designers of these applications. Just the same, often I've run into problems where I wanted to manipulate information in a different manner than was originally intended. All too often my actions send me out into a "corner case" off the beaten path.
Essential and Accidental Difficulties?
Why does a designer have to decide exactly which kind of controls to use in an application anyways? Why must the precise layout and behavior of each presentation element be predetermined? Why cannot the information managed by the application be manipulated and presented more dynamically? Oh right. It's hard to do otherwise!
Is it essentially hard? I can think of plenty of architectural choices that make information access easier or harder. Separating the application's presentation and model tiers makes things easier whereas tightly coupling them makes things harder. Leveraging a framework for managing docked views, editors and menus makes things easier whereas rigidly laying out all UI components makes things harder. So at least some of the difficulty is accidental.
I believe the essential problems for software are the same as those that occur in other information-rich contexts. However, I also believe software has an advantage. Software supports richer, more dynamic interactions than any other form of media. Moreover, software can be enriched at any time by the contributions of an information-savvy community.
On the other hand, it happens quite that software must satify competing informational objectives. Google Books can only display a limited amount of its contents in one sitting to discourage copyright abuse. Therefore its User Interface must actively restrict its features as regards providing access to the underlying information. This is not an especially productive activity, but it's the nature of the business.
An Information Bazaar
There is no technical reason preventing software applications from adopting common standards in the representation of their information. There is no technical reason that external visualizations could not be supported most anywhere. After all, why should software always build information engines from scratch? Would software interoperability improve if we could just agree on common meta-classes for data structures?
Software is Over-Specified
Software is over-specified! When viewed as an embodiment of a pure information system, it is quite irrelevant which precise control is used to interact with some piece of information. The software is performing some abstract function of displaying, summarizing, selecting, highlighting, demonstrating, navigating, and visualizing its information.
Could software offer a richer user experience if less effort were devoted to tediously stuffing a Tri-State Tree in a place where a List or a Search Query or a Shopping Cart really wanted to be? They would all achieve the same purpose after all. Why does the choice need to be fixed in place? Can the underlying framework support multiple options (including 3rd party contributions) and let the application provide hints as to which one to use by default? Can the framework be enhanced with a theory of information design much like an expert system so it can make "intelligent" recommendations about how to structure the information?
There are problems.
- Would any time actually be saved or would implementation complexity simply get out of control?
- Would the users benefit in any way from the added control or would they be frightened and confused by it?
- How would the artist's intent be reconciled with the application's dynamic presentation?
- How would the designers ensure a consistent and high quality user experience when so many unknowns may be left up to the framework to decide?
- How would the information be represented in such a way as to be consumable by any number of generic views?
In any case, it bothers me profoundly that software is so vertical. There is too little common ground. Each application contains a wealth of information but remains steadfastly inaccessible. Those very few applications that are open and extensible are expensive to produce and don't always meet expectations. Even mashups are just cute examples of software interoperability but they don't address the essential problems.
We can design APIs but thus far we have had much difficulty designing information...