SAFe Knowledge Base » Domain Modeling

Domain Modeling

Essentially, all models are wrong, but some are useful.

—George E. P. Box

Domain Modeling is a method to describe and model entities and the relationships between them, which collectively represent the problem domain space.

Derived from understanding system-level requirements, identifying domain entities and their relationships provides a basis for understanding and designing systems for maintainability, testability, and incremental development. Because there is often a gap between understanding the problem domain and interpreting requirements, domain modeling is essential to Agile development at scale. Driven partly by object-oriented design approaches, domain modeling envisions the solution as domain objects collaborating to fulfill system-level scenarios.

In SAFe, domain models connect to the Team, ART, Solution Train, and Portfolio backlogs, providing a common language. The connection between domain models and Nonfunctional Requirements (NFRs) often helps identify alternative design approaches to satisfy the corresponding NFRs.

Domain modeling also enables organizations to use Agile design patterns and approaches that enhance long-term velocity. As the system design changes, updating and improving the domain model is vital to a continued understanding of the system and helps refactor code to reduce the system's complexity.

Introduction

Domain modeling is an essential tool for software engineering: if you only model one thing in Agile, model the domain. Even a relatively small domain modeling effort is an excellent tool for reducing the complexity of system development. It helps clarify requirements and the design intent. It reflects the current understanding of entities and their relationships and responsibilities with the problem domain. Figure 1 shows an example of a domain model for a consumer subscription management system.