Domain

In software development, the domain — also called the business domain or problem domain — refers to the sphere of knowledge, activity, and rules that a software system is built to model and support.

The domain is the real-world context in which the system will operate. The domain defines what the software is for, what problems it addresses, and for whom. The domain encompasses the business concepts, processes, rules, and entities that are used in the real-world context. The domain covers core business activities and workflows, terminology, roles, regulations, industry-specific knowledge, and the relationships between these elements.

Defining the domain is as much about scoping what the software will not do as what it will do.

Examples of domains include customer relationship management, financial loan processing, video subscription services, and e-commerce.

Large domains are typically decomposed into subdomains: more focused areas of knowledge or activity, each representing a distinct business capability. For example, in a video subscription service, the billing, content delivery, and user account management areas might each be treated as separate subdomains.

In domain-driven design (DDD), each subdomain maps to a domain model — a structured set of abstractions capturing the relevant concepts and their relationships. These models are expressed in a ubiquitous language: a shared vocabulary agreed upon by developers and [domain experts] (subject-matter experts from the business) that is used consistently in conversation, documentation, and code.

See also [problem space].