What is a Domain in DDD?
Overview
This document summarizes the definition of a Domain in DDD.
Introduction
DDD stands for Domain-Driven Design. Therefore, understanding what a domain is becomes essential when applying DDD. Since DDD is a well-structured design approach, many software systems adopt it as a software development methodology. To understand DDD effectively, the first step is to understand the concept of a domain.
This document explains the concept of a domain from the perspective of DDD, along with additional common domain classifications.
What is the Domain?
In DDD, a Domain refers to a specific problem area or subject that needs to be addressed in software development.
For example, if a company needs to develop an auto-information-registration software to eliminate the inconvenience of customers manually writing their information, the company's domain would be “information registration.”
A domain can be considered the primary keyword of the software. Thus, Domain-Driven Design means developing software centered around the domain.
Additional Domain Types in DDD
In DDD, several types of domains exist:
-
Core Domain
A core domain is the part of the system that provides a competitive edge, differentiation, and unique advantage. It is the most critical domain in your business.
Examples: Google’s search engine, Netflix’s content recommendation algorithm, TikTok’s short-form content system. -
Generic Subdomain
This is a domain area that handles generic functionalities common to many services and does not provide a competitive advantage on its own.
Examples: User authentication, email validation, notification systems. -
Supporting Subdomain
A supporting subdomain assists the core domain’s operation. While it may not offer a direct competitive edge, it is vital for enabling the core domain to function effectively.
Example: TikTok’s video upload system — not a competitive differentiator by itself but essential for supporting the video recommendation algorithm (the core domain).
Final Thoughts
Ultimately, software exists to solve real-world problems. Therefore, defining the domain — the very problem to be solved — is crucial in software development. I have always heard that the domain is important, but through this reflection, I now understand precisely what it is and why it matters.
In the future, I will design software with careful consideration of the domain.
A well-designed domain not only improves development productivity but also strengthens business advantages.