Applications are dumb! They can't take a hint! No matter how many times you've corrected their behaviour, they keep repeating it!
Why is this? For a number of reasons.
- Applications can't talk to each other (except in special occasions, like clicking a link, in which case the communication is one-way)
- The data that applications send to each other (or propagate around within themselves) doesn't know where it came from, why it was created, what its purpose is, who created it, etc. In other words, there's no metadata.
- Applications are made out of concrete. They're hermetically sealed boxes that the user can't rip apart, reorganize, or introspect. Applications need to be more like databases, which are designed to be queried in totally custom ways.
Context and Metadata
If applications can't see the context in which they're used, then it's impossible for them to behave intelligently. Browsers will be unable to group pages by the task the user is currently performing. File->Open dialogs will have no idea which folder the user is working in, and force them to manually navigate to the folder every time. Notifications for non-task-related applications, like Twitter, will distract the user as they're trying to focus.
To be able to collaborate:, apps need two things:
- Apps need a generic way of querying each other for information
- All data an app receives must be tagged with metadata, such as:
- Where the data came from
- What task the user was trying to accomplish
- Which programs this data has passed through
- What its origin was (a site on the internet, a USB stick, etc.)
Apps need to loosen up
An app's UI is inflexible. Once the code is compiled, the UI is carved in stone. Even before it's compiled, reorganizing it breaks the intricate network of little callbacks and wires that makes it function.
In theory, this shouldn't be a big deal, since we have dynamic introspective languages (like Python) and UI toolkits which can be reconfigured on the fly (like GTK+).
There must be a generic mechanism for allowing apps to coordinate their activity.
What was the user doing? Why were they doing it? How are these apps being used in concert to process this task, in this context, for this goal?
All objects in the system must be taggable with metadata
Where did this object come from? What does it mean? Why was it created?
If apps can't answer these questions, then they won't be able to operate intelligently. Machine learning will be useless.