About
Settings

Chats

What is a Domain in DDD?

2 minutes
DomainDDDDesign

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.