I recently released my first solo iPad application Infinite Sketchbook. It's a drawing app that's extremely simple, except that it has an "infinite" canvas, so it lets you zoom extremely far in and out, and there is no fixed edge. Pen size is relative to the screen because there's no idea of "100% zoom." You just draw anywhere. It's awesome.
So I've been thinking a lot about what makes a good user interface. If there's one mistake I try the hardest to avoid, and fail most often to avoid, it's allowing irrevocable actions—actions where, if you make a mistake, the only way to fix the mistake is to do something differently in the past.
Infinite Sketchbook only has like five features and is already full of irrevocable actions:
- If you delete a sketch, it's gone for good.
- If you draw, then do something that clears the undo stack (like switching to another sketch or killing the application), you cannot remove what you drew.
- If you draw something, then draw something else, the only way to undo the first thing is to undo the second thing first.
- If you undo a drawing, then draw something else, the first thing you drew is gone forever.
- If you draw something with the wrong pen size, you have to draw it again with the correct pen size.
It's only thanks to how used we are to inconveniences like these that I even considered releasing with (what I consider to be) such serious problems. And it's only thanks to our history of doing what's easier to write the code for instead of what's easiest for people to use that we're often completely blind to them.
Software state is annoying. When a user makes an action, programmers don't want to have to remember that action forever, much less how to reverse it. When the user deletes something, it's much simpler (and frees space!) to actually delete it than to keep it around and provide a mechanism for bringing it back. It's hard enough to manage a program's state without also having to manage its meta-state.
But we should! It's terrible that every time a user does something that clears an undo stack, somewhere in the back of their mind they have this nagging feeling that they're losing something valuable. They have to decide whether to continue, or somehow try to capture the data in a way that won't disappear so easily.
The undo stack and other meta-state is worth saving because of the past state it represents. Users should be able to use their computers fearlessly, with complete disregard for the consequences of their actions. Their work is usually sacred before they begin to think of it as such, and having to reconsider every action you take before you take it is mental energy better spent on almost anything else.