Since the Beads language main purpose is to facilitate graphical interactive programs, merely rewinding the state doesn't cut it. You also have to show the state of the screen that corresponds to the internal state, so systems like Visual Studio which are tracking the minute changes to each memory address don't actually help that much. Most of the code in an interactive product revolves around drawing things, and responding to user input. For example, in a tic tac toe game, which is one of my shortest examples, the amount of computation is tiny; you have to check 8 different paths in the game to see if a play wins. So in my case the debugger is actually a second program in Beads watching the execution of a sub-program, the game. Not only is there reversal, but also time dilation and compression. Since i had this feature in mind at the start, i built the whole product around making sure that it would work. It is very easy to inject a feature which is non-reversible. A lot of the OOP paradigm works against you in reversible systems, which is why there is no NEW or DISPOSE in my language. The big payoff in time travel is when you can do it so efficiently that the shipping product can keep the feature on, and thus when the user encounters a bug, they can send their breadcrumb trail to the developers and now you have 100% repeatability on bug reports. Apple and the big companies spend a fortune on time wasted not being able to repeat a problem, and net result of the inability to recreate the user's exact situation is that products are bug-ridden today. Nobody can afford to chase down an intermittent error, so companies have taken the very cynical tactic of using their customer base as their final QA, and waiting for a statistically significant number of error reports before they investigate and try to fix. That's no way to run an airline if you ask me. I want people to make products that are near perfect, and the only way to get near perfection is to guarantee repeatability, even when you have random numbers, multiple players in a game, flaky networks, etc.
But on the flip side, i hardly use the feature, because so far my sample programs are very small. The more animation your product does, the more you need slo-mo, reversing, etc. Flashy features like time travel debugging are very exciting, but it doesn't fix a bad design, or make a user interface clean and clear. A bad design is bad in both directions... I find that most of one's time in graphical products is spent making sure the design still looks good across a wide range of screen sizes. The Android space is mind-bogglingly broad in terms of hardware capabilities, with notches popping up in every odd location, and some wacky screen resolutions. I have spent 10 times more time on the screen layout features than time travel.