We use differing metaphors when we do different things on a computer. At various times we interact with shared documents, video chats, ebooks, augmented reality environments, software development tools, 3D modeling/animation tools, computer games, science simulations, and so on, with each type of interaction implemented by another computer program.
At any given moment, your computer screen might contain a video chat, a Google doc, an eReader program, and so on, all implemented as separate programs. Because of this separation, interaction between these programs tends to be limited.
I suggest that this approach is ultimately a mistake. Once it has been decided that functionality should be split into separate bodies of software, many kinds of rich interactions between the underlying metaphors simply cannot be implemented.
Google Wave was a noble and ultimately unsuccessful attempt to be a single integrated environment — an all-in-one program that does everything. I suspect Wave may have been trying too hard to be capable of doing absolutely anything one could ever think of.
Suppose instead we were to approach such an integration first and foremost from the perspective of user-centered design. Rather than set out to build a software tool that “could do everything”, we might instead ask “what would the user of such an integrated tool actually want?”
We then let the answers to that question guide our software design choices.
