One of the recurring challenges at the beginning of collaboration with clients is how to quickly and effectively understand what they do and where their biggest challenges lie. To address this, a Domain-Driven Design (DDD) training was recently held in Belgrade’s Levi9 office, as part of our internal Architect group activities.
This training served as an introduction to Domain-Driven Design, a discipline that focuses on modeling software that closely reflects the business domain it is intended to serve. Designed for a broader audience beyond Software Architects, the session also included colleagues from Delivery Management roles.
Designing Software with Purpose: The Structure Behind the DDD Training
The training was structured into five modules, developed and delivered by levi niners Slađana Tufegdžić and Miloš Cvetković. We spoke with Miloš about his impressions after the training:
“The key takeaway is that DDD helps us understand our clients’ needs faster and in a more structured way. It gives us a set of tools to first grasp the bigger picture of what the client does and identify the most critical problems to solve. It also allows us to validate whether a software solution is even needed in the first place. A key part of this is the EventStorming method, supported by tools like The Big Picture Workshop.” Miloš shares and continues:
“Strategic and tactical DDD patterns give us a broad set of techniques to translate business requirements into software. The main idea is to carry domain language, events, and structures directly into the codebase – creating a shared understanding across teams, while reflecting the domain’s real complexity and meaning.”
EventStorming and Big Picture Workshop
EventStorming is a collaborative modeling technique that brings together domain experts and technical teams to visualize complex business domains. Using color-coded sticky notes, participants represent domain events, commands, policies, and other elements on a timeline.
The Big Picture Workshop focuses on mapping out the entire high-level business process, revealing hidden dependencies, bottlenecks, and opportunities for improvement. This format accelerates domain knowledge transfer, fosters shared understanding, and often uncovers critical insights that are easily missed in traditional requirements-gathering sessions.
Strategic DDD Patterns: Managing Complexity
Strategic patterns in DDD – particularly Bounded Contexts and Ubiquitous Language – offer essential tools for managing complexity in large-scale software systems.
- Bounded Contexts define clear boundaries around domain models, preventing conceptual ambiguity and allowing teams to work independently with consistent internal logic.
- Ubiquitous Language creates a precise, shared vocabulary between domain experts and developers. It minimizes miscommunication and ensures that software accurately reflects the business it supports – not just in concept, but in code.
Tactical Design: Building Blocks for Implementation
Tactical design in DDD provides core building blocks for implementing domain models:
- Value Objects and Aggregates help define clear boundaries and maintain invariants within the domain.
- Domain Events capture significant state changes that matter to stakeholders.
- Domain Services handle operations that don’t naturally belong to entities or value objects.
Together, these elements ensure that software implementations remain true to the strategic domain insights uncovered earlier in the process.
Event Modeling: Bridging Business and Implementation
Event Modeling is another collaborative technique that visualizes system behavior over time. It connects domain events, user commands, and interface views into a comprehensive timeline that bridges business requirements with technical implementation.
By mapping out the flow of events and corresponding UI screens, Event Modeling provides a shared blueprint that stakeholders can understand and validate. It simplifies the design of complex systems by focusing on what actually happens in the domain, supporting event-driven architectures and preserving a full historical record of business activity.

As Domain-Driven Design becomes an integral part of how we approach complex systems, we’re always open to exploring how this mindset can benefit new projects and partnerships.
In this article:
