How software can act as an assistant to the user rather than a tool, by learning from interaction and by proactively anticipating the user's