worrydream.com**.
This draft was released March 15, 2006. A couple examples are missing, and a few are out-of-date. I would appreciate any feedback on the content, presentation, or what exactly I should do with this thing I wrote.
**Firefox and IE** cannot print this webpage. If you like reading on paper, please {download the PDF}{pdf}.
{pdf}: MagicInk.pdf


]
A person uses information software to *construct and manipulate a model that is internal to the mind* -- a mental representation of information. Good information software encourages the user to ask and answer questions, make comparisons, and draw conclusions. A person would use recipe software, for example, to decide what to cook for dinner. She would learn about various dishes (where ``learning'' could be as informal as a quick skim for something tasty that contains ingredients on hand), compare her options, and make her decision. In effect, she is constructing an internal understanding of culinary possibilities, and mentally prodding this model to reveal the optimal choice. It's the same effect she would hope to achieve by consulting a recipe _book_.
**Manipulation software** serves the human urge to create.
[:
]
A person uses manipulation software to *construct and manipulate a model external to herself* -- a virtual object represented within the computer, or a remote physical object. Some examples include software for drawing, writing, music composition, architectural design, engineering design, and robot control. Manipulation software can be considered a virtual _tool_ -- like a paintbrush or typewriter or bandsaw, it is used as an interface between creator and artifact.
**Communication software** serves the human urge to communicate.
[:
]
A person uses communication software to *construct and manipulate an internal model that is shared with others* -- an understanding synchronized across multiple minds. Examples include software for email, group discussions (whether voice, video, or text), and collaborative working. In terms of raw mechanics, communication can be thought of as _creating_ a response to information _learned_ -- that is, the external model manipulated by the speaker is the internal model learned by the listener. Thus, this paper will simply treat communication software as manipulation software and information software glued together, and mention it no further. [This dismissal is rather disingenuous -- communication software is fundamentally unlike the other two because its user is a _group_, and a group as a whole can have different goals than any of its constituents individually. The considerations of social software design are well beyond the scope of this paper, but see {Clay Shirky}{clay}'s essays, particularly {Social Software and the Politics of Groups}{claypaper} (2003).] This design approach is widespread -- email software typically has separate reading and writing modes; messageboards similarly segregate browsing and posting.
{clay}: http://www.shirky.com/
{claypaper}: http://shirky.com/writings/group_politics.html
Manipulation software design is hard
-----------------
Creating software for creating is tricky business.
Manipulation software generally displays a representation of an object -- the model -- which the user directly manipulates with pseudo-mechanical affordances. Because manipulation is the domain of industrial design, manipulation software emphasizes industrial design aspects.
Consider a tool for laying out a small newspaper. The user will spend most of her time performing a number of pseudo-physical operations -- writing, drawing, cutting, moving, rotating, stretching, cropping, layering -- within a virtual space. The primary design challenge, just as with any industrial design, is to provide affordances that make these mechanical operations _available_, _understandable_, and _comfortable_. However, in a physical space, each operation would use a specialized tool. Designing a ``mega-tool'' that cleanly incorporates all operations (and flattens them into two dimensions, and uses only the gestures ``click'' and ``drag'') is a significant challenge indeed.
Although manipulation is the focus, good manipulation software must provide superb visualization as well. This establishes the feedback loop that is critical for all creative activity -- the manipulator must see the effects of her manipulation. Thus, manipulation software design is also a significant graphic design challenge.
For example, the newspaper editor needs to see what a page looks like -- close-up, from a distance, and in relation to other pages -- and how it _would_ look in a variety of other configurations. She wants to see misspelled words, lines that are poorly justified or hyphenated, and widows and orphans. She wants to see columns that are short or overlong, and how they can be corrected by changing column width or leading. She wants to know what stories and ads are still on the table, their sizes, and how they can be fit in. She wants to know how recently and how often stories about a given topic have run, and how readers have responded. She wants to know past response to a given ad, as a function of the topics or authors of the stories it was coupled with. Finally, the presentation of all this information must not distract the editor from the primary task of manipulating the layout.
Furthermore, the industrial and graphic designs in manipulation software must be in intimate synergy, since it is the graphic design which describes how the object can be manipulated -- the mechanical affordances are graphical constructs. Even more graphically challenging is manipulation of abstract objects, such as music or financial data, where the graphical representation must show not only what can be done with it, but _what it is_ in the first place. [As opposed to painting software, for instance, where the graphical representation can be the artifact itself. This is not a pipe, but it's close enough.]
Because of these intertwined design challenges, the design of excellent manipulation software is _unbelievably_ difficult, and mustn't be underestimated. Fortunately, for an enormous class of software, manipulation is not only largely unnecessary, but best avoided.
Most software is information software
-----------------
People spend more time learning than creating.
J.C.R. Licklider once examined how he spent his research time:
> In the spring and summer of 1957... I tried to keep track of what one moderately technical person \[myself\] actually did during the hours he regarded as devoted to work... About 85 per cent of my ``thinking'' time was spent getting into a position to think, to make a decision, to learn something I needed to know. Much more time went into finding or obtaining information than into digesting it. Hours went into the plotting of graphs, and other hours into instructing an assistant how to plot. When the graphs were finished, the relations were obvious at once, but the plotting had to be done in order to make them so... Throughout the period I examined, in short, my ``thinking'' time was devoted mainly to activities that were essentially clerical or mechanical: searching, calculating, plotting, transforming, determining the logical or dynamic consequences of a set of assumptions or hypotheses, preparing the way for a decision or an insight. [J.C.R. Licklider, ``{Man-Computer Symbiosis}{lick}'' (1960).]
For Licklider and other early visionaries such as Vanevar Bush and Doug Engelbart, [See Bush's paper ``{As We May Think}{bush}'' (1945) and Engelbart's paper ``{Augmenting Human Intellect}{engelbart}'' (1962).] the ideal of the then-hypothetical personal computer was a brain supplement, enhancing human memory and amplifying human reasoning through data visualization and automated analysis. Their primary concern was how a machine could help a person _find_ and _understand_ relevant knowledge. Although they were generally discussing scientific and professional work, their prescience fully applies in the modern home.
{lick}: http://memex.org/licklider.pdf
{engelbart}: http://www.bootstrap.org/augdocs/friedewald030402/augmentinghumanintellect/ahi62index.html
{bush}: http://sloan.stanford.edu/mousesite/Secondary/Bush.html
Most of the time, a person sits down at her personal computer not to create, but to _read, observe, study, explore, make cognitive connections, and ultimately come to an understanding_. This person is not seeking to make her mark upon the world, but to rearrange her own neurons. The computer becomes a medium for asking questions, making comparisons, and drawing conclusions -- that is, for _learning_.
*People turn to software to learn the meaning of words, learn which countries were bombed today, and learn to cook a paella. They decide which music to play, which photos to print, and what to do tonight, tomorrow, and Tuesday at 2:00. They keep track of a dozen simultaneous conversations in private correspondence, and maybe hundreds in public arenas. They browse for a book for Mom, a coat for Dad, and a car for Junior. They look for an apartment to live in, and a bed for that apartment, and perhaps a companion for the bed. They ask when the movie is playing, and how to drive to the theater, and where to eat before the movie, and where to get cash before they eat. They ask for numbers, from simple sums to financial projections. They ask about money, from stock quote histories to bank account balances. They ask why their car isn't working and how to fix it, why their child is sick and how to fix her. They no longer sit on the porch speculating about the weather -- _they ask software_.*
Much current software fulfilling these needs presents mechanical metaphors and objects to manipulate, but this is deceiving. People using this software do not _care_ about these artificial objects; they care about seeing information and understanding choices -- manipulating a model in their heads.
For example, consider calendar or datebook software. Many current designs center around manipulating a database of ``appointments,'' but is this really what a calendar is for? To me, it is about combining, correlating, and visualizing a vast collection of information. I want to understand what I have planned for tonight, what my friends have planned, what's going on downtown, what's showing when at the movie theater, how late the pizza place is open, and which days they are closed. I want to see my pattern of working late before milestones, and how that extrapolates to future milestones. I want to see how all of this information interrelates, make connections, and ultimately make a decision about what to do when. Entering a dentist appointment is just a tedious minor detail, and would even be _unnecessary_ if the software could figure it out from my dentist's confirmation email. My goal in using calendar software to ask and answer questions about what to do when, compare my options, and come to a decision.
Consider personal finance software. Entering and classifying my expenses is, again, tedious and unnecessary manipulation -- my credit card already tracks these details. I use the software to _understand_ my financial situation and my spending habits. How much of my paycheck goes to rent? How much to Burrito Shack? If I give up extra guacamole on my daily burrito, will I be able to buy a new laptop? What is my pattern of Christmas spending, and will I have to cut back if I don't take any jobs for a month? If I buy a hybrid car, how much will I save on gas? I want to ask and answer questions, compare my options, and let it guide my spending decisions.
Consider an online retailer, such as Amazon or Netflix. The entire purpose of the website -- the pictures, ratings, reviews, and suggestions -- is to let me find, understand, and compare their offerings. The experience is about building a decision inside my head. In the end, I manipulate a shopping cart, but that is merely to put my mental process to effect, to reify the decision. At the best retailers, this manipulation is made as brief as possible.
Even consider reading email. Most current designs revolve around the manipulation of individual messages -- reading them one-by-one, searching them, sorting them, filing them, deleting them. But the _purpose_ of reading email has nothing to do with the messages themselves. I read email to keep a complex set of mental understandings up-to-date -- the statuses of personal conversations, of projects at work, of invitations and appointments and business transactions and packages in the mail. That this information happens to be parceled out in timestamped chunks of text is an implementation detail of the communication process. It is not necessarily a good way to _present_ the information to a learner.
Similar arguments can be made for most software. Ignore the structure of current designs, and ask only, ``Why is a person using this?'' Abstracted, the answer almost always is, ``To learn.''
So far, this categorization has just been an exercise in philosophy. But this philosophy suggests a very practical approach to software design.

This design may be adequate for commuters, whose questions mostly concern when trains arrive at stations. But train system operators have a different set of questions: Where exactly are the trains at any given time? How fast are they moving? Where do two trains cross? (They better not be on the same track at that point!) Where are the trains at the start of the day, and where do they end up at night? If a train is delayed, how do all these answers change? Like some of the software questions above, these questions seem very difficult to answer. But consider this revised timetable design:
Each train is represented by a distinctly-colored line, with distance along the track plotted vertically and time horizontally. The slope of the line represents the train's direction and speed; horizontal sections are stops. This graphic incorporates no more _data_ than the previous one, yet all of the operators' questions are answered at a glance. Important features such as crossings are _emphasized_ simply because the eye is naturally drawn toward line intersections. Footnotes are unnecessary; the exceptions are no longer exceptional when seen in context. Should a train be delayed, all revised stops and crossings can be ``calculated'' simply by drawing a new line.
[Graphical train timetables date from the late 1800s. For the origin of this and other classic graphical forms, see Howard Wainer's book {Graphic Discovery}{wainer} (2005).]
{wainer}: http://www.amazon.com/gp/product/0691103011
Compared to excellent ink-and-paper designs, most current software communicates deplorably. This is a problem of surface, but not a superficial problem. The main cause, I believe, is that many software designers feel they are designing a machine. Their foremost concern is behavior -- what the software _does_. They start by asking: What functions must the software perform? What commands must it accept? What parameters can be adjusted? (In the case of websites: What pages must there be? How are they linked together? What are the dynamic features?) These designers start by specifying _functionality_, but the essence of information software is the _presentation_.
[:It must be mentioned that there is a radically alternative approach for information software -- _games_. Playing is essentially learning _through_ structured manipulation -- exploration and practice instead of pedagogic presentation. Despite the enormous potential for mainstream software, accidents of history and fashion have relegated games to the entertainment bin, and the stigma of immaturity is tough to overcome. (The situation is similar for graphic novels.) Raph Koster's {Theory of Fun for Game Design}{koster} (2004) and James Paul Gee's {What Video Games Have To Teach Us About Learning and Literacy}{gee} (2003) deal directly with games as learning tools. Salen and Zimmerman's {Rules of Play}{salen} (2003) and Chris Crawford's {Art of Interactive Design}{crawford_art} (2003) and {Chris Crawford on Game Design}{crawford_game_design} (2003) discuss learning through play in a broader context.]
*I suggest that the design of information software should be approached initially and primarily as a graphic design project.* The foremost concern should be appearance -- what and how information is presented. The designer should ask: What _is_ relevant information? What questions will the viewer ask? What situations will she want to compare? What decision is she trying to make? How can the data be presented most effectively? How can the visual vocabulary and techniques of graphic design be employed to direct the user's eyes to the solution? The designer must start by considering what the software _looks like_, because the user is using it to learn, and she learns by looking at it.
Instead of dismissing ink-and-paper design as a relic of a previous century, the software designer should consider it a _baseline_. If information software can't present its data at least as well as a piece of paper, how have we progressed?
{koster}: http://www.amazon.com/gp/product/1932111972
{gee}: http://www.amazon.com/gp/product/1403965382
{salen}: http://www.amazon.com/gp/product/0262240459
{crawford_game_design}: http://www.amazon.com/gp/product/0131460994
Demonstration: Showing the data
-----------------
Redesigning Amazon as an information graphic.
Edward Tufte's first rule of statistical graphic design is, ``_Show the data._'' All information graphics, statistical or not, must present the viewer with enough information to answer her questions. It seems that many software designers, in their focus on functionality, forget to actually present the data.
Consider the information presented when searching a popular online bookstore. [Based on {amazon.com}{amazon} as of January 2006.]
{amazon}: http://www.amazon.com


and one that was loved and hated
-- these are both 3-star ratings, but have very different meanings. The viewer can also see whether a highly-rated book got _any_ bad reviews; in a sea of praise, criticism often makes enlightening reading. As a whole, the whiskers give a visual indication of the number of ratings, which reflects the trustworthiness of the average. The whiskers are unobtrusive, and can easily be ignored by viewers who don't care about distribution.
[:
]
Text weight and color is used to emphasize important information and call it out when skimming. Text in grey can be read when focused upon, but disappears as background texture when skimming. All critical information is contained in a column with the *width of an eyespan*, with a picture to the left and supplementary information to the right.
The viewer can thus run her eye vertically down this column; when she spots something interesting, she will slow down and explore horizontally.
The user wants to see books related to a topic in her _head_. But ideas in the head are nebulous things, and may not translate perfectly to a concrete search term. For this reason, a mini-list of related books is provided for each book. [:
]
This is similar to a ``related words'' section in a thesaurus listing -- it allows the user to correct a near miss, or veer off in a tangential but intriguing direction.
Conventional software designers will worry about functionality -- how does the user interact with this graphic? Clearly, other than the ``related books'' listing, a click _anywhere_ in a book's section should reveal details and purchasing options. What else could the user mean by clicking? It's analogous to pulling the book off a physical shelf.
This is a significant redesign over the original; yet, I consider it a conservative one. A more ambitious design could surely show even _more_ data, perhaps allowing the user to browse within the book or fully explore the space of related books. A world of possibilities opens up with a simple change of mindset. This is not a list of search results -- it is an information graphic. It is for _learning_.
Demonstration: Arranging the data
-----------------
Redesigning Yahoo! Movies as an information graphic.
Just as important as _what_ data is shown is _where_ it is shown. Unlike the words in a paragraph, the elements in a graphic can be deliberately _placed_ to encourage spatial reasoning. Unfortunately, most software graphics are arranged to maximize aesthetics, not to bring out useful relationships in the data. (That is, when any skilled thought is given to appearance at all.)
Consider this excerpt of a graphic for browsing nearby movie showings: [Based on {movies.yahoo.com}{yahoo_movies} as of January 2006.]
{yahoo_movies}: http://movies.yahoo.com




]
However, unlike genuine manipulation software, the user does not _care_ about this model -- it is merely a means to the end of seeing relevant information.
The designer's goal is to let the user adequately shape the context model with as little manipulation as possible. Assuming that graphic design, history, and the environment have been taken as far as they will go, there are a few techniques that can lessen the impact of the remaining interaction:
- *Graphical manipulation* domains present the context model in an appropriate, informative setting.
- *Relative navigation* lets the user _correct_ the model, not _construct_ it.
- *Tight feedback loops* let the user stop manipulating when she's close enough.
**Graphical manipulation.** Command-line systems are criticized for forcing the user to learn the computer's language. Modern GUIs may be easier to use, but they are not much different in that respect. The GUI language consists of a grammar of menus, buttons, and checkboxes, each labeled with a vocabulary of generally decontextualized short phrases. The user ``speaks'' by selecting from a tiny, discrete vocabulary within an entirely fixed grammatical structure -- a bizarre pidgin unlike any human language, unexpressive and unnatural. [One might wonder what Sapir and Whorf would conclude.]
As an alternative, consider a child describing his toy at ``Show and Tell'': [From Scott McCloud's book {Understanding Comics}{mccloud} (1994), p138.]
{mccloud}: http://www.amazon.com/gp/product/006097625X


As an example of more application-specific context, a prominent online flower shop lets the user narrow the view via a set of drop-down menus. [Based on {teleflora.com}{teleflora} as of January 2006.] Compare it with a simple visually-oriented redesign:
{teleflora}: http://www.teleflora.com/searchrequest.asp



rating in Macworld magazine. If you are unfamiliar with the widget, you can watch a one-minute demo movie:
As information software, the widget was approached primarily as a graphic design project. I will discuss how its design exemplifies the viewpoints in this paper, and also point out where it falls short and could be improved. [The widget originally inspired this paper, not vice-versa. Thus, the widget does not reflect new ideas conceived while writing this. (Yet!)] I will also compare it to the trip planner on the official BART website, which follows the typical mechanical paradigm of drop-down menus, ``submit'' button, and table of results.
The BART widget was designed around three classical forms of graphical communication: the timeline, the map, and the sentence.
Showing the data
-----------------
Information software allows the user to ask and answer questions, make comparisons, and draw conclusions. In the case of trip planning, some questions are:
- When is the next train leaving? How long is that from now?
- When is that train arriving? How long is that from now?
- Which line is that train on?
- Does that trip have a transfer? Is so, when, where, and for how long?
- What about the train after that? And after that?
- How frequently do the trains come?
- What about trains around 7:00 am on Tuesday?
Users use the answers to compare the available trips, and draw a conclusion about which to take. Naturally, it must be possible for that conclusion to take the form of a plan: ``Which train will I take? I will take the 7:32 train.'' However, the plan then becomes a mental burden on the user. A good design would also allow for a series of quick boolean conclusions over time: ``Should I start walking to the station _now_? No... no... no... okay, let's go.''
The choice of graphical representation depends on what sort of data space is left after context-based winnowing. What context can be inferred?
The user is expecting to leave around a particular time; thus, the graphic can exclude trips outside of some narrow time window. Furthermore, the most common time is ``soon''; thus, the software can initially assume that the time window is ``the near future.'' Also, notice that all of the questions implicitly refer to a single route -- a particular origin and destination pair. That is, the user wants to compare trips along the time dimension, but not the space dimensions. Thus, the graphic need only concern itself with a single route, which we last-value predict to be ``the same as last time.'' [A learning predictor for the route is presented later in the paper.]
After winnowing the data, we are left with a handful of trips -- ordered, overlapping spans of time. We need a graphical construct that allows the viewer to compare the start, end, and length of each span. A natural choice is a _time bar graph_, which allows for important qualitative comparisons at a glance: When does each span start and end? How long is each span? How close together are they?
[:The time bar graph may have been invented by proto-chemist Joseph Priestly in 1765 to compare the {lifespans}{priestly} of various historical figures. Priestly's chart inspired William Playfair to invent the modern statistical bar graph. Howard Wainer claims to have uncovered a bar graph from 3000 years earlier, plotting population changes in the tribes of Isreal after the exodus. See {Graphic Discovery}{wainer} (2005), p18.]
{priestly}: http://www.math.yorku.ca/SCS/Gallery/images/priestley.gif




]
The mouse scrollwheel and keyboard arrow keys also serve to navigate through time. The ``underlying'' graphic is infinite -- the user can scroll forever. Thus, a GUI scrollbar would be inappropriate.
**Absolute navigation.** To plan around an arbitrary time, the user clicks a button to reveal the hours of the day, from morning to night, laid out linearly. The user can then click anywhere on the mechanism to jump to that time.


,
the trip is added to a bookmarks list. From then on, that trip and its reverse can be selected with a click. No manipulation is needed to bring up the bookmarks list -- it slides out when the mouse is over the widget.
[A better design might further reduce interaction by annotating each bookmarked trip with its next depart time. In many cases, that would eliminate the need to even click on the bookmark. Another improvement would be to automatically infer ``bookmarks'' from recent trips or environmental clues.]







]
Some additional graphical touches help bring the design together. The sentence is contained within a cartoon speech bubble which, beyond simply looking cute, implies that the activity pertains to speech, and points via the tail to the button which spawned it and the trip to which it refers. More importantly, if a voice announcement is activated, the button's icon changes to an active speaker.
This avoids a ``hidden mode'' problem by providing a clear visual indication of where the voice is coming from and how to turn it off.
Comparison
-----------------
The trip planner on the official BART website refuses to divulge any information whatsoever without a sequence of menu selections and a button-push.
[Based on {bart.gov}{bart_website} as of January 2006.]
{bart_website}: http://www.bart.gov






{shannon}: http://cm.bell-labs.com/cm/ms/what/shannonday/shannon1948.pdf
A tool encodes mental _information_ into physical _data_, which can travel in a physical _medium_. A platform decodes the physical data into the mind of the recipient. Because all information transfer short of telepathy requires some medium, this model is universal. If I write you a letter, my tools are pen and paper, and your platform is knowledge of my written language. If I broadcast a radio signal, my tools are a microphone and transmitter, and your platform is a radio receiver. In general, my tools are whatever I use to make the thing I hand off to you. Your platform is whatever I'm counting on you to already have.
To deliver her message most effectively, the visual designer needs _as much control as possible_ over what the viewer sees. But, by definition, the designer only has direct control over the _tool_. She is at the mercy of whatever platform implementation the recipient happens to supply. This implies that a good platform must be as _simple_ and as _general_ as possible.
{hoare}: http://www.braithwaite-lee.com/opinions/p75-hoare.pdf
- **Simplicity.** [: ``I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are _obviously_ no deficiencies, and the other way is make it so complicated that there are no _obvious_ deficiencies.'' C.A.R. Hoare, {The Emperor's Old Clothes}{hoare} Turing Award lecture (1980), p81.]
From a practical (and historical) standpoint, we can assume that _no complex specification will be implemented exactly_. This, in itself, is not a problem. However, multiple, decentralized implementations of a complex specification will be incorrect in different ways. A platform consisting of the union of all possible implementations is thus arbitrarily _unreliable_ -- the designer can have no assurance of what a recipient actually receives. *For a platform to be reliable, it must either have a single implementation, or be so utterly simple that it can be implemented uniformly.* If we assume a practical need for open, freely implementable standards, the only option is simplicity.
[POSIX, Java, and newer web standards (DOM, CSS) are some attempts at universal platforms (for various domains) that have proven too complex to implement uniformly. In each case, the power of the platform is effectively constricted to some simple, reliable _subset_, and enormous time is wasted designing around incompatibilities. By contrast, JPEG, MP3, and modern CPU instruction sets are universally dependable, because much of the complexity is placed at the encoding tool, not the decoding platform. (Almost a century ago, a similar justification was used to reject single-sideband public radio.) The complex Perl and Flash platforms are dependable only because they have centralized implementations.]
- **Generality.** If we think of a computer as a machine that runs software, then in some sense, all data handled by a computer platform must be ``software.'' The data making up a JPEG image, for example, can be thought of as the encoding of a _program_ that describes a picture. (This is sometimes called the ``data is code'' equivalence.) But the limitations of the JPEG platform result in severely lobotomized ``programs'' -- they cannot animate, respond to context, incorporate new compression techniques, or otherwise take any advantage of the _computer_ beyond what JPEG explicitly allows. A crippled platform cripples a designer's means of expression.

This graphic has a number of dynamic aspects: position, length, color, and label. For now, we will just handle the color and label. We draw a picture, take a snapshot, and indicate the data properties that it corresponds to:




]
We will use two data properties. ``Now'' refers to the current time, and ``Time'' refers to the start or end of the trip. Here are our first two snapshots:




















] In addition to feedback through examples, the mapping curves described above also provide feedback. As the designer creates snapshots, she can see the inferred curves. If an inference is incorrect, she can either create more snapshots, or directly edit the curve (as long as the tool has correctly inferred which _variables_ are involved in the mapping).
If the tool feels an extrapolation is ambiguous, it can display all of the candidate extrapolations on the curve, and the designer can select one with a click:









]
The user indicates interest either by explicitly switching the planner to display a route, or by looking at the planner and then looking away, indicating that the shown route is still interesting.
**Prediction.** When the user looks at the planner, each history entry ``votes'' for its route with a certain weight, and the route with the largest total weight is displayed. Each entry's weight is a product of three factors, which depend on the time, the day of the week, and the age of the history entry.
- [:
]
**Time.** If the time is 9:00, the user's route at 9:10 yesterday is very relevant. What the user did at 10:00 is not quite so relevant, and her 12:00 activity is probably unrelated. Thus, each vote is weighted by a window around the time of the history entry.
]
**Day of the week.** A user will typically exhibit a superposition of daily patterns, such as going to and from work, and weekly patterns, such as cello practice every Tuesday. To allow for both, history entries from a different weekday are allowed to vote, but have a smaller weight. The bleed across days allows the algorithm to learn daily patterns faster, but because other days are penalized, weekly patterns can be learned as well. Saturday and Sunday are independent from weekdays and from each other.
- [:
]
**Age.** Older history entries are given less weight, and eventually are forgotten. This makes the algorithm _adaptive_. If the user adopts a new pattern, such as switching jobs or joining the Thursday-night knitting circle, the algorithm is able to keep up, instead of having to be manually reset.
Finally, the most recent route is given a bonus vote. This causes the algorithm to default to last-value prediction if there is no compelling reason to do otherwise.
**Results.** I tested this algorithm with user models that simulate a variety of schedules. Various trade-offs are possible through choices of weights and window widths; the results below are intended to convey a qualitative idea of the algorithm's performance.
For a user who simply uses the planner to go to and from work, the algorithm learns the pattern flawlessly within a week. When the user switches schedules, the algorithm adapts within a couple weeks. [Of course, humans won't check the planner at exactly the scheduled time, and neither does the model. The simulated times are normally distributed around the base time shown in the schedule, with a standard deviation of half an hour.]



- After reading the email, I open my map software to find that nearby pizza restaurants are prominently marked.
How might such behavior be implemented?
One approach is to build a _system_ that directly performs the desired behavior. In this case, perhaps one would design an email program with a built-in map. If the current email contains the word ``pizza,'' the program would perform an internet search for pizza places and display them on its map.
There are several reasons why the system-based approach is unappealing:
- Monolithic systems don't scale. The system described is a trivial solution to a general problem. What about information from a website showing up on my calendar? What about seeing encyclopedia entries related to the paper I'm writing? The possibilities grow combinatorially -- it is impossible to deliberately handle them all.
- Monolithic systems are bad for users. Email and maps are distinct concepts. There is no reason why a user should turn to the same software package for two unrelated purposes. [For that matter, email and calendars are distinct concepts as well.] Also, the components of integrated systems tend to be of lower quality than their dedicated counterparts. You could chop your vegetables and assemble your furniture with a Swiss Army knife, but you probably don't.
- Monolithic systems are bad for software providers. In a healthy marketplace, whether of groceries or auto parts, individual providers offer components which combine with others for a complete solution. A small software provider could provide an excellent email program, or an excellent map. But only a large corporation has the resources to develop an integrated package. Once small companies can't compete, progress stagnates.
What we need, then, is not a _system_ that implements this behavior, but a _platform_ that enables such a system to grow organically, via small contributions from diverse providers.
In forsaking integration, however, we forsake designed coordination between components. The email program and the map will be designed by two different software providers, oblivious to one another. The programs must somehow exchange information _without knowing anything about each other_ -- without even knowing the other exists.
As it happens, such a mechanism has long existed for _manipulation_ software -- copy-and-paste. This mechanism uses the platform as an intermediary. When the user ``copies'' a picture in a drawing program, the program hands data off to the platform. When the user then ``pastes'' the picture into a word processing document, the program requests data from the platform, and handles it according to its type. The drawing and word processing programs know nothing of each other -- they know only of the platform and standard data exchange formats.
Extending this concept to information software involves two additional concerns:
- Autonomy. As befitting manipulation software, copy-and-paste requires explicit manipulation by the user. Information software must be able to share information implicitly and autonomously, with no user interaction.
- Translation. An email is not a map location. Nor is a website a calendar event, nor a word processing document an encyclopedia entry. The information must be _translated_ from one form to another.
Given that this platform exists to promote inference from the environment, let us take some inspiration from a _biological_ environment. The very essence of a biological environment is autonomous translation. Plants translate sunlight into fruit, large animals translate fruit into dung, small animals translate dung into soil, plants translate soil into fruit. *An ecosystem is a network of individual components which consume nutrients and translate them to an enriched form consumed by others, autonomously and with no knowledge of the system as a whole.*
If we adopt this process in software, considering our ``nutrients'' to be information, we have an _information ecosystem_. Consider this system:


] Consider again my friend's email. The text digester might pick out the word ``dude,'' which would go through the business listings at AgoraBiblia.com, resulting in the neighborhood dude ranch showing up on my map. This would be a nuisance if it occurred every time I received an email from my friend.
The problem is addressed through *backpropagation of feedback*. Feedback can be either explicit or implicit. Explicitly, I can indicate to the map that I am uninterested in dude ranching. This negative feedback is returned to the AgoraBiblia.com translator, resulting in low confidence in future dude ranch matches. The feedback may even propagate back to the text digester, slightly lowering the confidence that the word ``dude'' indicates a topic of interest. Implicitly, simply looking at the map without indicating interest in the dude ranch will cause a slight negative feedback, resulting in its de-emphasis over time. On the other hand, if I frequently click on pizza places, positive feedback will backpropagate through the chain of translators, increasing confidence in all things pizza-related and resulting in their emphasis on the map.
In effect, the entire environment becomes a learning system, tailoring itself to the individual user. While topics model the user's immediate interests, the history acquired through feedback allows the system to model the user's long-term characteristics.
**Protocol.** The last problem I will consider here is the political issue of protocol creation. Just what is a Restaurant object, and who decides that? Standards, especially premature ones, stifle invention and progress, but anarchy results in incompatibility. It may be possible to address this problem through namespacing and published proprietary protocols.
To answer the above question, there _is_ no Restaurant object. Instead, EpicurioCity produces a %com.EpicurioCity.Restaurant% object, [Or however namespacing is spelled in the implementation language.] whose protocol is defined and managed by EpicurioCity.com. This proprietary object can be composed of other proprietary objects, as well as some standard objects defined by the platform, such as %Text%, %Keyword%, and %Location%. Note that this proprietary Restaurant is not hindered from showing up on the map, since the map will accept anything with a Location (and presumably some other standard properties such as a name and description). [In object-oriented terminology, %com.EpicurioCity.Restaurant% conforms to the Mappable interface, and the map requests Mappable objects. However, this ``interface'' can be very informal, and even unknown to the Restaurant. If the Restaurant happens to define enough standard properties, it can be mapped.] A restaurant guide view, on the other hand, would be written to take advantage of the extra information that %com.EpicurioCity.Restaurant% offers -- ratings, reviews, and such.
When another provider, CuisineCousins.com, develops a competing restaurant translator, it can follow EpicurioCity's published protocol and produce %com.EpicurioCity.Restaurant% objects. This makes their new translator immediately compatible with existing views. Meanwhile, the translator can _simultaneously_ offer their own objects, such as a %com.CuisineCousins.Eatery%, with whatever advantages over EpicurioCity's protocol. View providers can then update their software to also accept CuisineCousins's protocol, if CuisineCousins offers a compelling enough advantage.
If a de facto standard emerges and stabilizes, it might eventually get canonized as the official %Restaurant% object. Even then, though, providers will be able to add proprietary namespaced extensions to it.
**Modularity.** An obvious benefit to this platform is that it enforces modularity between data and views. Unlike current systems, in which almost all data and functionality is locked up behind a user interface, every service on this system is available to every view. More subtly but just as importantly, the fact that translators have no end-user interface means they can be created by engineers. Only the views must be designed for users. Meanwhile, a designer who is dissatisfied with a view can simply create and release a replacement, with no engineering worries about data acquisition. Because the system can be easily improved without cross-disciplinary concerns, creativity and invention should flourish.
Information and the world of tomorrow
------------------
Why all this matters.
Today's ubiquitous GUI has its roots in Doug Engelbart's groundshattering research in the mid-'60s. The concepts he invented were further developed at Xerox PARC in the '70s, and successfully commercialized in the Apple Macintosh in the early '80s, whereupon they essentially _froze_. Twenty years later, despite thousand-fold improvements along every technological dimension, the concepts behind today's interfaces are almost _identical_ to those in the initial Mac. Similar stories abound. For example, a telephone that could be ``dialed'' with a string of digits was the hot new thing ninety years ago. Today, the ``phone number'' is ubiquitous and entrenched, despite countless revolutions in underlying technology. Culture changes much more slowly than technological capability.
[Other obsolete but entrenched designs: the QWERTY key layout (intentionally sub-optimal to reduce typewriter jams), the von Neumann architecture (see John Backus, {Can Programming Be Liberated from the von Neumann Style?}{backus}, 1978); C and UNIX (see Richard Gabriel, {The Rise of ``Worse is Better''}{gabriel}, 1991).]
{backus}: http://www.stanford.edu/class/cs242/readings/backus.pdf
{gabriel}: http://www.jwz.org/doc/worse-is-better.html
The lesson is that, even today, we are designing for tomorrow's technology. Cultural inertia will carry today's design choices to whatever technology comes next. In a world where science can outpace science fiction, predicting future technology can be a Nostradamean challenge, but the responsible designer has no choice. A successful design will outlive the world it was designed for.
With what artifact will the people of tomorrow learn information? I believe that in order for a personal information device to be viable in the long term, it must satisfy two conflicting criteria: portability and readability.
- **Portability.** Consider today's ubiquitous information device -- the book. We have the technology to manufacture 5000-page desk-sized tomes, but despite the high information content, such books are rare. The reason is simply that they can't be carried around. As people increasingly expect information on demand, portability will become ever more critical. Today, people can talk to anyone on the planet by reaching into a pocket; tomorrow's information device must be just as accessible. Like a wallet and keys, the computer will be dropped into the pocket or purse before leaving the house. [Ideally, it will even supplant both wallet and keys.] This implies light weight and small volume.
- **Readability.** Consider again the book. We have the technology to produce books smaller than a business card, but despite the improved portability, such books are also rare. The supremely-portable postage-stamp-sized book is non-existent. The catch: *Although technology miniaturizes, the human eyespan remains a fundamental constant.* In order to compete with the book, tomorrow's information device must provide a book-sized surface area. Anything less cannot be read and skimmed comfortably, and cannot support spatially-distributed information graphics.
To resolve these contrasting size constraints, I predict a computer the size and thickness of a sheet of paper. Like paper, its entire surface is a graphical display. When in use, it is rigid; when not in use, it collapses and can be folded or rolled up (or crumpled!) and tucked into a pocket or purse.
Regardless of whether I've guessed its form accurately, we can predict the device's expected characteristics by extrapolating technological trends. Consider the capabilities relevant to context-sensitive information graphics: graphical output, history, environment, and user interaction.
- **Graphical output.** To serve as a book, the device must have a sufficiently large reading area and high pixel resolution. To serve as a computer, the device must produce dynamic color graphics. In matching each of today's devices, tomorrow's device will overcome the shortcomings of the other. Dynamic graphics with print resolution will open up a world of possibilities for detailed information graphics which are impossible today in either medium.
- **Environment.** Because the user will carry this device everywhere, the device's environment will literally be the user's own. Assuming a sufficient networking model, the device will be able to sense an enormous amount of information from the environment -- geographical location, physical surroundings (streets, stores, transportation options, entertainment options), social surroundings (friends, strangers with interests in common, strangers who can serve a need), and more. The device will have a far better sense of the user's environment than the user herself.
- **History.** Since its inception, electronic storage has exponentially increased in density and decreased in cost. We can fully expect tomorrow's device to have onboard capacities that stagger modern sensibilities. But, perhaps more importantly, ubiquitous network access will make memory effectively _unlimited_. The device will have the means to remember everything the user has ever done and every environment in which she did it. With such a tremendous history and sense of the environment, software will have an unprecedented potential to predict the user's current context.
- **Interaction.** Touch or motion-based manipulation is somewhat more efficient than the mouse. Eye-tracking and speech may be better still, although even these are unlikely to match the order-of-magnitude improvements predicted for the capabilities above. But none of these mechanisms will ever approach the sheer amount of information that can be absorbed by the eye. No matter what new interactive technology comes along, the bandwidth between the device and the user will remain not merely asymmetric, but utterly lopsided.
Interaction is already a bottleneck. It will get much worse as graphics, environment, and history experience their expected breakthroughs. To me, the implication is clear -- the principles of information software and context-sensitive information graphics will become _critical_ as technology improves.
The future will be context-sensitive. The future will not be interactive.
Are we preparing for this future? I look around, and see a generation of bright, inventive designers wasting their lives shoehorning obsolete interaction models onto crippled, impotent platforms. I see a generation of engineers wasting their lives mastering the carelessly-designed nuances of these dead-end platforms, and carelessly adding more. I see a generation of users wasting their lives pointing, clicking, dragging, typing, as gigahertz processors spin idly and gigabyte memories remember nothing. I see machines, machines, _machines_.
I expect that designers who cling to these models will appear to the next generation like classical physicists as the world turned quantum, like epicycle-plotters as Kepler drew ellipses, like Aristotelians as Galileo stood atop the tower at Pisa. No matter how hard they work or how much they invent, these designers will not be revered as pioneers. They are blazing trails through a parking lot.
Our pioneers are those who _transcend_ interaction -- designers whose creations _anticipate_, not _obey_. The hero of tomorrow is not the next Steve Wozniak, but the next William Playfair. An artist who redefines how people learn. An artist who paints with magic ink.
