Domain-driven design has given us an excellent guide to tackle the complexity by keeping the domain concepts at the core of our designs. By defining ubiquitous language we demarcate context boundaries and divide the system into well-defined bounded contexts. Typically, we create a small world of aggregates and entities within these bounded contexts to implement… Read More KAPPA your Domain Model into the Data-Mesh Architecture
Event sourcing gives us a few benefits such as in-built audit logs, replay/rebuilds, multiple projections (read models), and non-blocking writes. There is always the other side of every benefit we enjoy in the architecture language – we call these trade-offs. One such trade-off to consider is eventual consistency vs strong consistency and in this post,… Read More Event Sourcing and Consistency
Apply learnings of Pet Helland’s paper “Data on the Outside versus Data on the Inside” on Event Driven Systems… Read More Events on the Outside vs Events on the Inside
Not only does the event sourcing inherit complexities of the asynchronous world, but it also amplifies them. In this post, I will discuss what I have learnt from developing and supporting a system built based on event sourcing. I will use an example to share my learning and experiences below, as I believe examples help… Read More Lessons from developing and supporting event sourcing based system
When it comes to the events, the big debate is about the contents of its body. Martin Fowler has written a great post on this topic. Some devs argue that events should carry the complete load with it, I am calling them Fat Events (Event Carried State Transfer) in this blog.And then we have others… Read More Events: Fat or Thin
In real-world monoliths, code of a single bounded context is spread across many dimensions. Extracting that code may require significant refactorings. It is rare to get an opportunity to refactor as a project of its own (in fact I do not believe that it is the best approach). So we try to do refactoring as… Read More Extracting microservice from a complex Monolith.
Besides an opportunity for my team to return to the comforts of dotnet from nodejs, performance improvements in asp.net core (as evident from the latest round i.e. 16 of Web Framework Benchmarks by TechEmpower) was another good reason to trial it for an internal microsite with limited users. Creating from SPA template Dotnet core SPA… Read More How to create a dotnet based SPA and deploy it with docker?
Furthermore to my previous post where I tried to compare events and commands, here I am presenting a scenario where they complement each other. As discussed, both of them are types of the messages and used for different purposes; while event messages are a backbone of the event-driven system, I believe that commands can add… Read More Events Love Commands
Cosmos DB has loads to offer, which make it a preferred choice in so many scenarios. Recently I was working on an audit log which is expected to be reasonably immutable (theoretically, every information on digital media is mutable). After looking at a few choices, we chose Cosmos DB along with Azure Service Bus and… Read More Immutable audit log in Cosmos DB
Most of the programmers quickly agree that naming is one of the hardest things they have to do as part of their Job. As Phil Karlton puts it “There are only two hard things in Computer Science: cache invalidation and naming things.“ Naming is hard because it is important to get it right. It is… Read More Events or Commands