Eric Evans revisits bounded context — the strategic-design pattern he introduced in the blue book — and argues it's a natural consequence of the ubiquitous language pattern. He clarifies the difference between bounded contexts, subdomains, and teams, and pushes back on the tidy diagrams that dominate DDD talks. Real systems are messy: legacy applications, SaaS integrations, and reorganisations pull the model apart, and bounded contexts are the pragmatic tool for keeping islands of order in that sea of mud.
DDD Europe 2020
Evans frames bounded context as an implication of the ubiquitous language pattern, not a separate idea you bolt on afterwards.
The name is not clever — it's just the ordinary meaning of the word.
booking.finalize on its own tells you nothing until you trace outwardAny separation a developer can easily see. Evans deliberately keeps the list open-ended.
Two systems hitting the same tables are not separated at all, no matter what the architecture diagram claims. The people inside the boundary also have to agree on what words mean and on some development process — otherwise they step on each other's toes.
The bit of the talk that clears up the most confusion. Evans uses a simple bank: cash accounts and credit accounts, each with its own business unit, software team, and model. On day one, bounded context / subdomain / team all line up perfectly. That's the tidy picture everyone draws.
Then he introduces a reorg. The bank realises customers actually split into individuals and businesses, not cash vs credit. Business units re-form. Software teams re-form. But:
The failure mode: teams act as though the software followed the reorg. Stewardship becomes unclear — nobody owns the integrity of the cash model any more — and both new teams start hacking on the same artifact without coordination. That's the three-legged race.
Two children tied together running a race — outcome depends on the balance of speed and coordination. Add a third leg, or a fourth, or a fifth, and eventually nobody can take a single step without falling. That's what happens when a single unified model has to serve everyone: forward motion requires universal agreement, and you get none.
A picture with two neat bounded contexts and a translator between them is aspirational. Evans deliberately messes it up:
Evans deliberately redraws the context map at realistic scale.
Why: without the ACL you'd absorb the legacy system's complexity into the new context, making it fuzzy at the edges and effectively bigger than the whole thing was before. The ACL is real software — often arbitrarily complex — but it lets the new system stay small and clear.
For anti-corruption layers, Evans uses a physical-space analogy: a house where you take off outdoor shoes at the door and switch to indoor shoes. Different expectations inside vs outside (cleanliness of floor, volume of voice), enforced at the boundary. Software boundaries work the same way — but only if you're serious about them.
You do have to take off your shoes when you come in the door every time — or be ready to mop up afterwards.
On the trouble with the word "ubiquitous":
One of my regrets about the word ubiquitous is that it means everywhere, and it makes people think that what we're looking for is a single model that would address all our problems throughout the system. But that's definitely not what we want to do.
On why the concept feels slippery:
The definition is sort of slippery. It's like trying to grab fog for people sometimes. It's actually one of those concepts I think that's so simple that people think, well, that can't be all there is to it.
On tidy diagrams:
A picture this tidy makes me very suspicious. In the real world, when I've been on real projects, things are never like this. Even projects that I've run. Although I must admit that there was a time when I thought that if we just tried hard enough we could make the whole thing like that — but it never happens.
On the reorg / stewardship problem:
Just because we did a reorg doesn't change the software we already have. And yet a lot of times when people reorganize the teams, they behave as if it did.
On coupling and paralysis:
Maybe in the end you conclude, I don't think I'm ever going to fully understand what's going to happen, and therefore I don't dare make any changes. And this is what happens to us in a lot of legacy systems.
Closing summary:
Bounded context is a pragmatic thing that allows us to do elegant designs in real situations, and not just talk about it, and not create problems for people who are trying to get their jobs done.