Upon reading the article, my initial thought was that it resonates with the concepts of Event Sourcing. However, as I think deeper, it dawned on me that while there are similarities, they serve different primary objectives. I realized that if the sole purpose is to implement bi-temporality, leveraging Event Sourcing could be somewhat convoluted and indirect.
In contrast, a focused bi-temporality solution could be more streamlined and efficient for cases where the primary need is to maintain historical accuracy with regard to effective and record times. It might entail less complexity in terms of data retrieval and management.
Aside from the data and the real world, it seems like there's a third thing that's likely to be changing: the code. How do you answer the question "what version of the software did we use to process the customer's contract on Tuesday?" And then the follow-up: "how can we check if that version of the software processed the contract correctly?" In many systems that I've worked on, it's not straightforward to run an earlier version of the code, because that code might depend on services that no longer exist.
Hi Kent, I found this article of yours with Massimo Arnoldi that seems to describe the same patterns in depth: "Time Travel: A Pattern Language for Values That Change". It's very nice, I'm rebuilding the examples in Java as I don't grok SmallTalk
When Did It Happen? When Did We Find Out?
Upon reading the article, my initial thought was that it resonates with the concepts of Event Sourcing. However, as I think deeper, it dawned on me that while there are similarities, they serve different primary objectives. I realized that if the sole purpose is to implement bi-temporality, leveraging Event Sourcing could be somewhat convoluted and indirect.
In contrast, a focused bi-temporality solution could be more streamlined and efficient for cases where the primary need is to maintain historical accuracy with regard to effective and record times. It might entail less complexity in terms of data retrieval and management.
I would be intrigued to know your thoughts.
It's fairly modern; just in the last few years. But I'm a fan (did a presentation on it at Pycon a year ago).
Python also has pattern matching and type unions, which I love.
Just an observation: Python dataclasses can make your code simpler/easier to read.
Aside from the data and the real world, it seems like there's a third thing that's likely to be changing: the code. How do you answer the question "what version of the software did we use to process the customer's contract on Tuesday?" And then the follow-up: "how can we check if that version of the software processed the contract correctly?" In many systems that I've worked on, it's not straightforward to run an earlier version of the code, because that code might depend on services that no longer exist.
Hi Kent, I found this article of yours with Massimo Arnoldi that seems to describe the same patterns in depth: "Time Travel: A Pattern Language for Values That Change". It's very nice, I'm rebuilding the examples in Java as I don't grok SmallTalk
Not easy to read code blocks, no highlights