Some of you found yourself in a situation, where your company asked you to start working remotely very suddenly. Some of you were already working partially or mostly remotely for some time and found ways of dealing with the challenges it presents. No matter which group you are identifying with - remote communication and modelling isn’t always easy, and each day brings new ideas, tools, discoveries, and challenges.
Read moreWorkshop recipe: Software Architecture Kata
From time to time I get asked a question: "how to get better at designing systems and software architecture?". I could recommend a number of books or videos, but as you know these two alone aren't going to magically teach us how to do design. What we also need is some concrete & deliberate practice.
Read moreModelling aggregates with "Aggregate Design Canvas"
Designing a good aggregate with the right boundaries and clear responsibilities is not a trivial task. A lot of times when I discuss various design options with people, I learn that they rely on gut feeling or implicit heuristics to guide modelling decisions. In order to make this design process simpler I've decided to create an Aggregate Design Canvas.
Read moreModelling Aggregates: Invariants vs Corrective Policies
Designing software systems that are aligned with business often leads to compromises and design tradeoffs. It's usually not feasible to model a system in a way that will in 100% reflect the real world.
Understanding business rules is the first step of getting a useful model, but that's not enough. Modelling them as software often leads to discoveries - we realise that it might not be practical, or even possible to enforce some of the rules.
The right thing to do in such a situation is to go back to domain experts and discuss the trade offs we are willing to make. That might mean that we will have to give up on implementing a strongly consistent Invariant and replace or support it with a Corrective Policy.
Event Sourcing: Projections
Projections are one of the core patterns used in Event Sourcing. What we understand by ES is persisting changes that are happening in the application as a sequence of events (also called an event stream). With this context in mind we can define a projection as an answer to a question: what is the current state derived from the event stream?
Read more