Let’s why this could be so, by considering the following workflow:
- A person is interacting with a computer system with certain goals in mind
- They try to express these goals in the language of the system, by issuing certain commands.
- If the command brings you closer to the goal issue another one.
- If the command brings you further from the goal:
- If undo is available as a command, undo.
- If undo does not exist, it’s not clear how to back on track - and even whether getting back on track is possible at all!
In other words: the ability to undo amounts to an enormous increase of control of the human actor over the system they are commanding, by allowing them to to roll back mistakes, even potentially very destructive ones.
This increase of control has a 1-to-1 mapping with a decrease in fear: the more sure you are that you can always undo mistakes, the less afraid you will be to make them. Such fear is most obviously visible when observing at those with low computer literacy in their interactions with computers, but it applies to everyone. This very emotion then hinders further learning, because it stands in the way of experimenting and gaining feedback about the way the system works.
Note that the increase of control and decrease of fear that undo brings is available even when your further knowledge of the system is very limited - as long as you’re confident that you can undo any action, you’re free to explore. In other words: Undo brings control in face of the unknown - quite a capability indeed!
By the way: the capability to undo is a typical example of an Expression of Change - the actions to be undone being the change about which we express ourselves.
Given how powerful the ability to undo is it’s worthwhile examining if it can be made even more powerful. To do so, let’s look at some limitations that typically apply in common desktop applications. The definition of “typically” is obviously up for debate, and thankfully there are many applications which do not suffer from one or more of the below limitations. In any case, “single undo only” and “no redo” are not mentioned below because most reasonably modern applications have virtually infinite undo as well as the ability to redo.
Discard on close - the ability to undo is lost when closing and reopening your editor. You may be able to save documents, but saving documents including their full undo history is not possible.
Lack of discoverability - the ability to undo is offered as a menu option and keyboard shortcut, but the historic record of changes cannot itself be inspected visually, saved or manipulated.
Linear undo only - the ability to undo is only available in anti-chronological order, i.e. by undoing the last change first, the second last second etc. It’s not possible to undo (or even more powerfully: edit) arbitrary changes in the past without undoing all follow-ups first.
No redo after do - when undoing a number of changes, and then making an arbitrary new change, the undone changes can no longer be redone. In other words: the state your document was in before undoing is not always reachable after the undo. Equivalently: the action of undo itself cannot always be undone.
Monolithic context - each document has a single undo history; when the document is composed of multiple parts or sections these do not have their own histories. Similarly, when multiple documents form a conceptual unit, such as the source tree of a computer program, undo is not available across documents but only at the level of a single document.
Undo is great, let’s have more of it.
We seen what limitations commonly apply in currently existing applications.
The challenge of this site is then simply: to come up with undo-like capabilities that don’t suffer from these limitations, like so:
Undo after close - the ability to undo is preserved even after the application has crashed or has been closed.
Change as a first level citizen - the historic record can be inspected, saved and manipulated like any other object in our system.
Arbitrary graph traversal - we have the ability to revert to any state of the document as it once existed.
Decompositon of context - for structured documents undo is available on arbitrary parts of the document, parts consisting of other parts, and the document as a whole.
This site documents work in progress; stay tuned for updates.