I mentioned my famous address story yesterday. As always, someone asked: âIs this a made-up example?â
Nope.
Twenty years ago, my first ever User Story. Me a junior, with 2 years of âexperienceâ. Basically no idea of anything to be honest. An ecommerce portal. A simple user story: adjust an address DTO, add some new fields. Should have been easy.
Instead? Two weeks of meaningless refactoring. Adding attributes. Releasing maven modules in the right order. Complete waste of time.
But hereâs the real shock - it wasnât that it took so long. It was that everybody accepted it. Including me.
That question - âis this made up?â - it tells you everything, doesnât it? Weâve normalized the insanity so completely that when someone hears about two weeks to add address fields, they assume it must be fiction. Canât be real.. Guess what, nothing really changed. We still operate and build Software in the same way.
Adding AI to the soup? doesnât solve any problem - we now can adjust AddressDTOs much faster. (clap, clap, clap)
The real problem
I used to worship the domain architects and enterprise architects. Early in my career, I was completely mesmerized by them. They seemed to craft these perfectly fitting domain models that captured the essence of how a business worked. Beautiful diagrams. Clean boundaries. Everything in its place. I thought: this is mastery. Get the model right, and everything else flows.
I want to be able to do that.
So I did what you do - I learned. Years of learning. Books. Working with customers. Practicing DDD by the book. Applying all the technical patterns. Aggregates, bounded contexts, the whole playbook. I heard it so often: âWe like DDD here, but we mainly focus on the technical parts.â
I heard this exact term last week in a conversation - nothing has changed. As if technical perfection would somehow solve business problems.
It took me years to realize I was on the wrong path.
Because hereâs what I started seeing: these beautiful models were all wrong. They lacked something here, something there. They werenât really extensible. Youâd hit walls pretty quickly. âNo, canât do that, this was not planned.â
And those Domain Architects would defend their models with bites and claws.
And no matter how good your model was, at some point in time, there would be this one requirement which brought in the first crack.
From then on, itâs pretty quick. The rotten process started.
Let me tell you what I mean. There is no one address. There are many addresses in many use cases. Company address. Person address. Delivery address. Theyâre not the same thing. But we keep trying to force one concept, one model, one truth. Itâs a fallacy - you can only lose when you play this game.
What we should have done with that address DTO twenty years ago? Use different representations for different use cases. But we couldnât see that then. We were too busy protecting the perfect model. Too busy releasing maven modules in the right order.
I wanted impact when I was in a project. I wanted to drive change. Adding fields to a DTO doesnât drive change - it drives crazy.
Technology doesnât matter
It hit me eventually: the technical parts - aggregates and stuff - they donât really matter in a dynamic architecture. We were optimizing for elegance, not for change. We were solving the wrong problem.
So what actually matters?
Alignment. People working towards a shared goal and understanding. People are welcome to do whatever they want within their slice. The goal isnât a perfect model - itâs a system where new requirements donât trigger two weeks of refactoring.
It really hit me when Adam Dymitruk mentioned this to me in a conversation. You shouldnât have to hire 10x developers to get going. You need a system to go fast with average developers. (hit like a fist in the stomach..)
Event Modeling and Slices
If you design your system in slices, you practice decoupling by design. Event modeling makes this explicit. Combined with event sourcing - again, decoupling by design. Itâs all about decoupling.
Your wonderful microservice architecture? I donât care. Show me the coupling. The architecture diagram doesnât tell you anything - the coupling does.
Hereâs my favorite moment in workshops now. We model the slices, and then we talk about âwhat would happen if we add a new requirement here?â
First, silence.
Then⌠âWait a second, isnât that just another slice.â
YES! EXACTLY! I scream at the top of my lungs.. finally someone got it right!
This is when people understand for the first time what it means to work with slices. The concept is called âdone is doneâ - you typically donât touch a slice until the requirements for this slice change, which might be never. N.E.V.E.R.
Slices are super stable. New requirements typically mean just adding new slices.
Completely different to what we were used to: change one thing, rework all others and pray.
Now, you canât just start using slices in a legacy codebase directly after a workshop. But you start to see the patterns where slices appear. You can discuss boundaries. The coupling is no longer hidden. Itâs screaming in your face. Undeniable.
And guess what - Coupling is a big problem if itâs hidden. It becomes manageable if you make it visible. You can change what you can see.
The Truth About Perfect Models
Your perfect domain model never existed. I know because I spent years chasing it. I spent two weeks adding fields to a DTO because I believed in it. I accepted it.
Stop chasing the perfect abstraction. Stop spending two weeks adding fields to DTOs. Stop accepting âthatâs just how software development is.â
Start designing for change, not for perfection. Start with slices, alignment, and making coupling visible.
When people ask âis that address story made up?â - I wish it was. But itâs not. And I bet you have your own version of this story. Maybe youâre living it right now.
The question isnât âhow do I create the perfect model?â The question is âhow do I build a system that doesnât rot when reality shows up?â
Event modeling and slices give you that answer. Not through perfection, but through designed decoupling and visibility.
If you want a system, that allows to fight coupling.
That allows to go fast with average developers (which isnât meant demeaning at all)
That allows to scale by adding people
That allows to survive when reality hits..
Donât do what weâve always done.. try something else. Make the problems visible and then tackle them.
The whole process is described in my book âUnderstanding Eventsourcingâ
Join the Agentic Engineer Program
Apply Spec-Driven Development Hands-On - Event Modeling, Event Sourcing, and AI Engineering with autonomous agents.
Book a Call Today
Want to talk through how Event Modeling could work for your team or project? Letâs have a quick, no-pressure conversation.
