Beyond the current state: Time travel to the rescue!
Current application state; what, in fact, is it? We, as software engineers, usually don’t think much about it (unless we face a consistency issues in a distributed system, in which case we might think about it a LOT).
Looking closer, one might realise, in essence what is known as current state is just a product of mutations over time. Mutations which, as they happen, commonly cause the software system to forget about what was, up to that point, known as current state. Once this becomes clear, one starts to wonder, is there a beneficial way to utilise this fact?
Starting from a perspective of "classic" n-tier system architecture, I will explore benefits and potential downsides starting with formally splitting r/w requests into commands and queries , recording state mutations as events, ending with a solid system capable of time travel and some other, potentially unexpected superpowers including, but not limited to, precognition, "roflscale", and self reconstitution.