State vs. Events
Are you familiar with meetings like Sprint Retrospectives, Post-Mortems, or Project Retrospectives, where you struggle to recall anything beyond the final outcome? We naturally focus on results rather than the process, on the end goal rather than the journey itself. However, the journey is significant, and to gain deeper insights and context, we need to understand the evolution.
I once led a several-month project and insisted on holding a retrospective. The first step was to create a list of events that described the project after each significant change. It looked something like this—
This approach is inspired by Event Sourcing. In a previous post, I discussed event-driven communication. In this post, I'll focus on tracking and analyzing using the event-sourcing method.
Event Sourcing
In traditional state-based systems, we decide what information to record and store in the latest state. For example, we might store the estimated project duration or the current scope at a given time.
With event sourcing, we record only events; the actual state is derived by "replaying" these events. Here’s an example from our project—
Let’s demonstrate it with another example. Imagine an e-commerce site that manages online purchases. A traditional state-based approach will look something like this:
While this provides a snapshot of the current purchase status, it lacks context about how it got there. For example, it becomes difficult if we want to refund delivery costs for orders that stayed in "Awaiting Delivery" for more than three days. This would likely require redesigning the data model and possibly migrating data (assuming it's available). Now, let’s see how event sourcing could solve this—
In this example, the purchase events are in chronological order, allowing us to replay them at any time to gain insights into their current or previous state.
Why Use It?
Event sourcing offers several benefits:
Context: Provides insight into how the state is derived.
Scalability: Enables the separation of writing new, unopinionated events from calculating the current state.
Flexibility: Simplifies adapting to changes and new requirements since the state can always be derived by replaying past events.
Our Project Example
Returning to the project example, recording and reviewing events changed my perception of the project's success. Suddenly, I could see all the change management, reduced resources, and increased scope, which, in the bigger picture, reframed the project as successful. Simply looking at the start and end dates wouldn’t have provided this perspective.
How to Get Started:
Identify Objective Data Points: Decide on the key data points you can track, such as scope, available resources, dates, and other indisputable facts.
Maintain a Log: Record every change by adding a new event to the log, capturing the agreed-upon data points.
Define the “Projection”: Determine what you want to assess in the final state, such as project duration, the number of scope changes, or invested man-months.
Replay the Events: Go through the events chronologically and calculate the “projection” to analyze the project's evolution.
While this approach can be tedious and resource-intensive, it provides valuable context and data-driven insights that outweigh opinions. Objective data points offer a more reliable assessment than the subjective analysis of one individual.
More Use Cases
Here are some other areas where a similar approach can be applied:
Decision-Making: Log each step and opinion from ideation to the final decision. This helps provide context and insights into why decisions were made, making revisiting and questioning confident choices easier.
Conflict Resolution: Track the events from the beginning of the conflict. Record who was involved, what each person said, and the actions taken. Agreeing on the facts and events leading up to the conflict brings you 80% closer to resolving it.
Career Growth Tracking: Knowing where you are now is more accessible than understanding how you got here. Tracking changes and decisions in your career allows you to be more candid and honest with yourself. Knowing your journey so far can help you better craft the road ahead.
Summary
Event sourcing is an architectural design pattern that manages the state through an event log. It offers benefits like richer history, improved context, and the ability to "time travel." This technique can also be applied to project management and career growth tracking to gain more objective insights into how things evolved.
Will you give it a try?