While working on complex frontends with ui interfaces built using reactive libraries like Knockout I occasionally came across situations where it would not be easy to deduce why a particular observable had a value that it had.
Declaratively defining computed observables works really well for modelling relationships, but sometimes makes reasoning through the dependency computation difficult - specially when dealing with real time data streams where entities have non-trivial relationships.
Sometimes it would be very minor errors eg. mutating an object contained in an observable which the observable could not detect because the identity of an object had not changed, or not failing to acknowledge that some computed observables were throttled while some others deduced from the same sources were not - leading to inconsistent state, that would take time in order of hours to debug.
While redux requires quite a bit of boilerplate, debugging through this kind of situations becomes a lot easier because you can log the actual sequence of actions, and know for sure that replaying the same sequence of actions will result in same (erroneous) state. Time travelling debugger just makes this debugging process a bit more easier because it lets you rewind and replay few actions and inspect store state in between.