I remember first learning about domain-driven design, and nearly every conversation I found focused on the tactical patterns: entities, value objects, repositories, aggregates. Those conversations also leaned hard toward the back end. People were drawing class diagrams and arguing about where the ORM layer ended and the domain began.

Around the same time, I was learning behavior-driven development. BDD pushed me to pay attention to the language stakeholders used, the words they reached for when describing a problem. That idea overlaps with one of the most useful parts of DDD: the ubiquitous language, the shared vocabulary that grows out of the actual business rather than being invented by the development team.

It took me longer to appreciate the strategic side of DDD. Bounded contexts, context mapping, anti-corruption layers — these ideas felt less concrete than repositories and entities, so I ignored them at first. That was a mistake.

The tactical trap

Tactical patterns are teachable. You can show someone what an aggregate is, how a repository abstracts persistence, and where a domain service fits. Because they map cleanly to code, they get most of the attention.

But if all you take from DDD is tactical patterns, you miss the point. I have watched back-end teams discuss “doing DDD” while they were mostly deciding how to map objects to tables. Object-relational mapping is a real problem, but it is not domain modeling. A clean repository interface means little if the concepts inside it do not match the business.

The hard part of domain-driven design is the domain itself: the language and the boundaries, not the folder structure.

Why front-end developers are left out

Front-end developers rarely run into DDD at all. When they do, it is usually through the same tactical lens applied to the client: stores, reducers, state machines, local storage. These tools solve real problems, but they can also train us to think about saving and retrieving data instead of understanding the context that data belongs to.

The user interface is usually where the language of the business shows up most clearly. Labels, buttons, error messages, and workflows all carry the vocabulary of the domain. If front-end developers do not recognize bounded contexts, they end up building screens that mix terms from different parts of the business and create confusion for users.

The strategic ideas worth knowing

You do not need to become a DDD expert to get value from it. A few strategic concepts are enough to change how you read code and talk to stakeholders:

  • Ubiquitous language. Use the same words the business uses, and be suspicious when the codebase invents its own vocabulary.
  • Bounded context. The same word can mean different things in different parts of a system. A customer in billing is not the same customer in fulfillment. Recognizing those boundaries prevents tangled, brittle code.
  • Context mapping. Once you see the boundaries, you can decide how they relate. Are they partners? Do they share a kernel? Is one upstream and the other downstream? Those relationships shape integration decisions.

These ideas are not back-end ideas. They are design ideas. They show up in APIs, in UI flows, in event names, and in database schemas.

What I am learning

Understanding context matters more than knowing the latest pattern. DDD has plenty of useful tactical tools, but the strategic side is what keeps teams from building the wrong thing with clean code.

I think every developer, front-end or back-end, should understand at least the basics: listen for the ubiquitous language, notice where one context ends and another begins, and be deliberate about how those contexts connect. Everything else is implementation detail.

ddd-every-developer.png

Leave a Reply

Trending

Discover more from Claudio Lassala's Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading