Hello,
One of my customer wants me to implement a Fund Referential system (asset
management business). They need various capabilities such as Audit Trails,
various kind of projections but also tons of temporal stuffs like: “I want
to know how this Fund X looked like last February…”. I initially thought that Event
Sourcing would be the perfect fit and started to write them a tiny demo of what
an event sourced system looks like (with an in-memory data store). Demo went
well and we’ve been decided then to evaluate GetEventStore and to spike the
read model and projections capabilities of the event sourcing paradigm. So far
so good.
Then… they came with another key-requirements for them: the ability to
patch a Fund in the past (e.g.: to be able to generate reports with data such as they should have been input initially). Basically I understand that the book of record for
Funds won’t be that new system but somehow the real world with other teams and other corps updating them
(other BCs). What they need is to catch-up sometimes with changes that has
happened various weeks/months (like the rename of a Fund) which they didn’t had
time yet to apply on their own System. In that case, they want the answer of the “I want to know how this Fund looked like last February…” request gives them the name of the fund as they should have been input initially and not as their system had it before.
In other word => they want me to get rid of the event sourcing
idempotency (…scary music here…)
I am now trying to think about all the options I have:
-
either doing something else
than event sourcing for their needor
-
to adjust the event sourcing
approach to their specific need with one or many technical strategies
In particular, I’m wondering what may be the consequences of introducing
a kind of “patch event” targeting an applicable timestamp in the past (stored
as meta-data). With such “patch event” we could imagine an implementation like
LoadFromHistoryIncludingPatchEvents(maxTimestamp) on our EventSourcedAggregates
instances that will replay all events from the past until that specific date +
all the following “patch events” that would be relevant (i.e. without erasing same
event types applied after the applicable timestamp of the patch for instance).
To be honest, I have the gut feeling that we’re gonna create a monster here following that lead…
Maybe there could be other alternatives such as “Copy and Replace” etc. Anyway, it’s the first time I heard about that need of patching the past in a system and some hints would be much appreciated here.
Cheers.