**Domain-Driven Design: Tackling Complexity in the Heart of Software** is a [[Software engineering|software engineering]] book by [[Eric Evans (software engineer)|Eric Evans]], published in 2003 by [[Addison-Wesley]]. The book introduces a set of principles and patterns for designing complex software systems by focusing on the core [[Domain (software engineering)|domain]] and its logic, emphasizing collaboration between technical and [[Subject-matter expert|domain experts]]. It is widely considered a foundational text in modern software architecture and has significantly influenced the development of enterprise application design.
The book argues that the most critical complexity in many software projects lies not in technical implementation but in the business domain itself. Evans advocates for creating a shared "[[Ubiquitous language]]"—a common vocabulary used by both developers and domain experts—to reduce miscommunication and ensure the software model accurately reflects business concepts. The text introduces strategic design concepts such as [[Bounded context|bounded contexts]], which define clear boundaries within which a particular model applies, and [[Context map|context maps]], which describe the relationships between these boundaries.
Evans also presents a collection of tactical [[Design pattern|design patterns]] including [[Entity (domain-driven design)|entities]], [[Value object|value objects]], [[Aggregate (domain-driven design)|aggregates]], [[Repository pattern|repositories]], [[Factory (object-oriented programming)|factories]], and [[Domain service|domain services]]. These patterns provide guidance for structuring domain models in [[Object-oriented programming|object-oriented]] systems. The book's influence extends beyond its specific patterns; it helped establish domain-driven design as a distinct methodology and inspired related movements including [[Command Query Responsibility Segregation|CQRS]] and [[Event sourcing|event sourcing]]. The term "Domain-Driven Design" is commonly abbreviated as "DDD" in software development communities.