Undo/Redo is a fascinating subject. In Adobe Photoshop, they use the ability to undo actions stored in the history palette to great effect, and it is linked with their actions palette, which permits automation to a pretty high degree. however, their undo/redo doesn't affect the user interface, so when you undo a series of actions, you might have to undo whatever changes to the interface were done. In my kids program Flying Colors (available for free download at
magicmouse.com), took reversibility all they way into interface, so that when you undo it also undoes the user interface. This also generated the possibility of having the software self-operate. A few products, very few, can do self-operation, and if you add audio narration, bingo you have a great lesson system. In my case it was about training young people to do bitmap painting. Having products self-operate is a wonderful training method, and the kind of ghost mode where there is an unseen hand moving the cursor and clicking is a fabulous way to teach. It was incredibly difficult to do though, and i haven't done it since. One area where i have continued research is in the issue of duplicating a customer problem in the lab. So often in web apps and interactive graphic software the customers hit a problem, report it, and because it can't be duplicated, it never gets fixed. So this is the problem i am solving in my Beads system, where i record the history, and the users can send that history and replay the bug at the factory. Not easy to to do actually, which is why you don't see it hardly at all.