I ALWAYS find making Undo/Redo robust to be one of the biggest challenges in any software application.
I ALWAYS find making Undo/Redo robust to be one of the biggest challenges in any software application.
Unless you base entire systems' designs around making undo/redo easy, but then it feels like you're making a lot more work for yourself elsewhere.
Because the CAD concept in general is build around parameterisation every modification the user makes needs to be able to be remade with on a different starting (or previous) state. In a way it becomes even more then a first class citizen functionality in the application. The entire history stack (timeline) is available and you can even directly edit, reorder or modify individual steps and their parameters instead of just un/redoing them.
It's also used by state management libraries like Redux[2]. The concept is generic and simple enough that it can be applied to any application where a timeline of state snapshots is useful, so maintaining a history for undo/redo purposes and audit logs is a great fit for it.
[0]: https://en.wikipedia.org/wiki/Lambda_architecture