17 Domain Conceptual Models
Domain conceptual models are highly effective for learning and clarifying key concepts and terminology of the application domain. They are typically represented as UML class diagrams, supplemented by a glossary. This chapter presents the notation and detailed guidelines for creating effective domain conceptual models.
17.1 In a Nutshell
What
A domain conceptual model defines the types of entities in the world, along with their attributes and associations. It uses a graphical notation that is a subset of UML class diagrams.
Figure 17.1 shows a portion of a domain conceptual model for an ambulance dispatching system.
This model includes three entity types:
Emergency Call
, with attributesdate
andtime
;Incident
, with attributelocation
; andAmbulance
, with attributeslocation
andstatus
.
It includes three associations:
Reporting
: an emergency call reports an incident;MobilizedTo
: an ambulance may be mobilized to an incident; andAtIncidentLocation
: an ambulance may be at some incident location, attending to the incident.
Why
In requirements engineering, domain conceptual model serves two main purposes:
- To understand stakeholders’ concepts and terminology;
- To define a common terminology (a shared language) for everyone involved - from business stakeholders to the software development team.
Many misunderstandings in software development result from imprecise and inconsistent terminology:
- People use different words for the same concept (synonyms) or the same word for different concepts (homonyms).
- Some terms lack a clear definition, or their meaning shifts depending on context.
Often, people are unaware of these inconsistencies, which exacerbates misunderstandings and creates unnecessary conflicts.
A well-defined conceptual model, supported by a glossary, is an effective solution to these challenges:
- The process of elaborating the model helps you learn the application domain’s concepts and terminology;
- The shared language reduces misunderstanding and improves collaboration with stakeholders.
- The model enables the software development team to better understand the domain, facilitating software design, implementation, verification, and evolution.
The primary purpose of a domain conceptual model is to identify, name, and define the key concepts in the application domain—not to design the software itself. While domain conceptual models can support software design—particularly in object-oriented design, domain-driven design, model-driven dngineering, and some low-code platforms—their primary use in requirements engineering is independent of these contexts. To create a high-quality domain conceptual model, even within these contexts, it’s best to initially disregard all software design considerations.
Who
Software engineers–including requirements engineers and the software development team–are the primary producers and consumers of these models, particularly in their graphical form (the UML class diagrams).
For many stakeholders, class diagrams appear overly technical and intimidating, so they are rarely shared with them. In contrast, the supporting glossary of terms is far more accessible. It provides a clear, shared vocabulary that all stakeholders can understand and use effectively.
When
Domain conceptual models are valuable throughout all stages of requirements engineering and software development. We begin constructing a domain conceptual model and glossary during the foundation phase, expand them in the exploration and formulation phases, and maintain them during the evolution phase.
17.2 Concepts and Notation
Notation Summary
Concept | Graphical Notation | Meaning |
---|---|---|
Entity | A “thing” with distinct and independent existence | |
Entity Type | E is a set of entities {\(e_1, ..., e_n\)}, called instances of E, that share common characteristics. | |
Association | R is a relation between E1 and E2 (R ⊆ E1 X E2). | |
Attribute | attr is a function from E to T, where T is the attribute’s value type (attr: E → T). | |
Value Type | T is a set of possible values. A value v is immutable and has no distinct identity. | |
Specialization | Every instance of E1 is an instance of E2. |
Entities
Figure 17.2 shows some entities in an ambulance dispatching system.
Key observations about this definition:
- An entity’s existence can be physical (e.g. an ambulance, a student, a classroom) or conceptual (e.g. an incident, a class, a university).
- An entity’s distinct and independent nature implies that it has a unique, immutable identity (e.g.
ambulance 1
,ambulance 2
, etc.) that does not refer to other entities. - An entity’s characteristics (i.e. its attribute values and association links to other entities) may change over time (e.g. an ambulance location may change, or it may be mobilized to different incidents at different times).
- Describing something as an entity is a modelling choice—a particular way of viewing the world–not a claim about ultimate reality. It means that, for the purposes of the model, we agree to treat this “thing” as having a distinct and independent existence.
Individual entities are not explicitly represented in the domain conceptual model. They are atomic elements described by the model, but they do not appear explicitly within the model.
Entity Types
Figure 17.3 show three entity types in the ambulance dispatching world:
Ambulance
represents the set of all possible ambulances;Incident
represents the set of all possible incidents;Emergency Call
represents the set of all possible emergency calls.
When the context is clear, we can say “entity” as a shorthand for entity type. For example, we can say that the model in Figure 17.1 has three entities.
Naming Guidelines
When naming an entity type:
- Use a countable noun or noun phrase in singular form.
- Capitalize all words (with or without space between them).
Examples:
Ambulance
(a countable noun),Emergency Call
orEmergencyCall
(a countable noun phrase).
A noun X is countable if you can count: “one X, two Xs, three Xs, etc.” For example, “one ambulance, two ambulances”. Non-countable nouns (like water, rain, air, pollution, money) cannot be counted or put into plural form. If you say “one water, two waters”, you’re counting bottles or glasses of water, not water itself.
Verbalization
Verbalizing a domain conceptual model–that is, describing it in spoken or written words–can help validate the model with stakeholders and test the validity of concepts names.
Entity types are verbalized using the following sentence pattern:
The entity type
E
is the set of all possiblee
s.
For example, if E
is Ambulance
, the sentence would be:
The entity type
Ambulance
is the set of all possible ambulances.
The verbalization helps validate the entity type name. For the name to be valid, the sentence must be grammatically correct and make sense.
Defining Entity Types
To avoid ambiguity and reduce the risk of misunderstanding, each entity type should include a brief definition characterizing its instances. For example:
Entity
Ambulance
Definition: A vehicle used for responding to medical emergencies.
Entity
Incident
Definition: An event that may require an emergency ambulance response.
Entity
Emergency Call
Definition: An call to the emergency service numbers (999 or 112).
These definitions form part of the model’s glossary of terms.
Definition Guideline:
An efficient way to define entity types is to follow Aristotle’s genus-differentia pattern: state the broader category (genus) the entity type belongs to, then specify the distinguishing features (differentia) that set its instances apart from others in that category. For example:
- An ambulance is vehicle (genus) used for responding to medical emergencies (differentia).
- An incident is an event (genus) that may require an emergency ambulance response (differentia).
- An emergency call is a call (genus) to the emergency service numbers (999 or 112) (differentia).
Associations
Figure 17.4 shows two associations:
MobilizedTo
betweenAmbulance
andIncident
Reporting
betweenEmergency Call
toIncident
The bottom of the figure shows association links that hold at a given time. The links may change over time. For example, amb_2
currently mobilized to inc_1
may later be mobilized to inc_2
.
Notes:
- Mathematically, an association is a relation.
- A binary association
R: E1 -> E2
corresponds to a relation \(R \subseteq E1 \times E2\), where association links are pairs \((e1, e2) \in R\). - An association can be N-ary (with N \(\geq\) 2). A ternary association
R: E1 -> E2 -> E3
corresponds to a relation \(R \subseteq E1 \times E2 \times E3\), where association links are triplets \((e1, e2, e3) \in R\). - An association can relate the same entity type more than once. For example,
Parent: Person -> Person
.
- A binary association
- In domain conceptual models, the arrow indicates the reading direction and order of entity types in an association. This differs from standard UML notation, where the arrow represents navigability—an implementation concern irrelevant to requirements engineering. In standard UML, the reading direction is either indicated by an arrowhead next to the association name or implied by the default left-to-right/top-to-bottom reading direction of Western languages (see Figure 17.5). While this book uses association arrows to indicate reading direction, many other sources follow the standard UML notation.
Naming Guidelines
When naming a binary association, use one of the following:
- A state verb phrase, in the third person singular.
- An action verb phrase, in the present participle or past participle (i.e. for regular verbs, the base verb + -ing or -ed, respectively).
- Any phrase that makes a state verb phrase if prefixed by ”is” or “has”.
Capitalize all words (with or without space between them).
A state verb is one that describe a state (e.g. “is”, “has”, “contains”) rather than an action (e.g. “reports”, “mobilizes”, “arrives”).
For example:
- [Emergency Call]
Is Reporting
[Incident] (a state verb phrase) - [Ambulance]
Mobilized To
[Incident] (an action verb phrased in the present principle) - [Ambulance]
At Scene Of
[Incident] (makes a state verb phrase if prefixed by “is”)
Verbalization
To verbalize a binary association R: E1 -> E2
, use the following sentence structure:
an e1 (is | has) R some e2.
For example:
- “An emergency call is reporting some incident.”
- “An ambulance is mobilized to some incident.”
- “An ambulance is at the scene of some incident.”
More specific verbalization pattern can be used when the association has multiplicity constraints (see Section 17.2.4.4).
Association Roles
In addition to its name, an association can also be labeled with roles—domain terms that describe the role of each entity in the association.
On the association line, the roles are displayed next to their corresponding entity types (Figure 17.6):
Mathematically, each role defines a function that is derived from R
:
role2: E1 -> set[E2]
maps eache1
the set ofe2
s linked toe1
byR
(\(role2(e1) = \{ e2 | (e1, e2) \in R\}\)).role1: E2 -> set[E1]
maps eache1
the set ofe1
s linked toe2
byR
(\(role1(e2) = \{ e1 | (e1, e2) \in R\}\)).
Naming Guidelines:
- A role must be a noun phrase, in either singular or plural form.
- Roles follow the same format as attributes (see below):
- The first word is in lower case.
- Subsequent words are separated using either camelCase or snake_case.
Roles are verbalized as follows:
- The
role2
of an e1 is the set ofe2
s linked toe1
byR
. - The
role1
of an e2 is the set ofe1
s linked toe2
byR
.
For example, Figure 17.7 defines two roles on the Is Author Of
association:
Is Author Of
association
Their verbalization are:
- The
bibliography
of a person is the set of books they authored. - The
authors
of a book are the set of persons who authored the book.
Implicit Roles and Nameless Associations
For associations linking distinct entity types (E1 \(\neq\) E2), roles are optional. When a role is not explicit, the entity type has an implicit role derived from its name in lower case–i.e. role2 = e2
and role1 = e1
.
For a binary association linking the same entity type (i.e. R:E1 -> E1
), at least one role must be explicitly defined.
An association may be nameless provided that at least one of its roles is explicit.
Defining Associations
Without a clear definition, an association may be interpreted differently by different people. To avoid ambiguity, it is essential to provide a concise and precise definition that clarifies its meaning. These definitions form part of the model’s glossary of terms.
Definition Guidelines
To define an association, consider the following guidelines and patterns:
Guideline | Definition Pattern |
---|---|
Define the association as a condition on the linked entities’ characteristics (attributes and other associations). | An [e1] is [R-linked] to an [e2] when [CONDITION on e1 and e2 attributes and other associations]. |
Define the association in terms of link creation and termination conditions. | An [e1] is [R-linked] to an [e2] when [CREATION CONDITION]. The [R-link] persists until [TERMINATING CONDITION]. |
State which actors determine the existence of an association links (i.e., who holds the ground truth about the link). | Whether an [e1] is [R-linked] to an [e2] is determined by [actor]. |
Examples.
For the first definition pattern:
Association
AtIncidentScene: Ambulance -> Incident
Definition: An ambulance is at the incident scene when it is stopped at or near the incident’s location, and its paramedics team is attending to the incident.
For the second definition pattern:
Association
AllocatedTo: Ambulance -> Incident
Definition: An ambulance is allocated to an incident when the central control room (a human dispatcher or the computer-aided dispatch software) assigns it to respond to the incident. The allocation persists until either:
- the paramedics complete the assignment (including patient handover to a hospital and ambulance cleaning, if needed), or
- the central control room cancels the assignment before the ambulance arrives at the scene (e.g., if the ambulance is no longer needed or is re-allocated a higher-priority incident).
Association
MobilizedTo: Ambulance -> Incident
Definition: An ambulance is mobilized to an incident when the paramedics team is en route to the incident. It remains mobilized until the paramedics complete or abandon the assignment.
Some associations have no termination condition—once created, the link persists indefinitely. For example, BiologicalParent: Person -> Person
. In such cases, the termination condition can be omitted, or the definition may state that the link is permanent.
The third definition pattern is used in addition to the other patterns to clarify which actor determine the link existence. For example:
Association
AllocatedTo: Ambulance -> Incident
Definition:
An ambulance is allocated to an incident when […].Whether an ambulance is allocated to an incident is determined by the central control room.
Association
Mobilized: Ambulance -> Incident
Definition:An ambulance is mobilized to an incident when […].
Whether an ambulance is mobilized to an incident is determined by the ambulance paramedics team.
Defining associations may seem unnecessary when the name already appears meaningful and unambiguous (e.g., Reporting: Emergency Call -> Incident
). While omitting definitions in such cases may be acceptable, doing so risks overlooking hidden ambiguities or edge cases. Ultimately, the decision to invest time in writing definitions should balance the required effort against the likelihood and impact of potential misunderstandings.
Multiplicities
Association multiplicities specify how many association links each instance of an entity type can participate in at any given time.
For a binary association R: E1 -> E2
, the multiplicity of E1 is expressed as min:max
, with the following meaning:
- At any given time, each instance of E1 is linked through R to at least
min
instances of E2. - At any given time, each instance of E1 is linked through R to at most
max
instances of E2.
In the UML notation, the min:max
multiplicity values for an entity type are shown on the opposite side of the association line:
Common multiplicities values and verbalization are:
Multiplicity | Meaning | Verbalization (for E1 multiplicity) |
---|---|---|
0:1 |
At most one | At any given time, an e1 is linked to at most one e2. |
1:* |
At least one | At any given time, an e1 is linked to at least one e2. |
1:1 |
Exactly one | At any given time, an e1 is linked to exactly one e2. |
0:* |
Any number | At any given time, an e1 is linked to any number of e2 (including zero). |
For example, Figure 17.9 shows multiplicities for the AtIncidentScene
association which connects ambulances to incidents they are currently attending.
AtIncidentScene
connecting ambulances to incidents
Notes:
- In requirements modelling, multiplicities should only be used to specify domain properties—facts that are always true by definition or due to natural laws. They should not be used for desired or assumed properties that could potentially be violated. Such properties must instead be explicitly stated as goals, requirements, or assumptions. For example, the statement “A flight seat should not be assigned to more than one passenger” expresses a goal and should not be modeled as a multiplicity constraint.
- The UML “look across” notation for multiplicities contrasts with the Entity-Relationship (ER) “same side” notation, where multiplicities are written next to their entity type. For example, in the ER notation, the 0:1 multiplicity for
Ambulance
in Figure 17.9 would be displayed next toAmbulance
instead of being displayed on the other side next toIncident
. In this book, we adopt the more widely used UML “look-across” notation, despite its inapplicability to n-ary associations when n>2.
N-ary Associations (with N > 2)
N-ary associations (where N > 2) are much less common than binary associations. They are often harder to understand, and the same domain concepts can often be modeled more clearly using binary associations. Therefore, I recommend avoiding N-ary associations when the same concept can be expressed more clearly without them. Nevertheless, they are sometimes required and it is important to understand what they are and how to represent them.
N-ary associations where N > 2 are represented using a diamond with lines to the connected entity types, as in Figure 17.10.
In Figure 17.11, the Intervention
association connects an ambulance and team of paramedics to an incident when the ambulance is at the incident location and paramedics providing assistance.
The min:max
multiplicity constraints for an entity type E
participating in an N-ary association R
have the following meaning:
- At any given time, each instance of
E
is involved in at leastmin
association links inR
. - At any given time, each instance of
E
is involved in at mostmax
association links inR
.
This interpretation is consistent with the meaning of multiplicity constraints in binary associations given above.
In the diagram, the multiplicity constraints of an entity in an N-ary association are shown on the same side as the entity type—-unlike in binary associations, where multiplicity constraints are shown on the opposite side.
For example, the multiplicity constraints in Figure 17.11 have the following meaning:
- At any given time, each ambulance is involved at most one intervention (
0:1
). - At any given time, each paramedics team is involved in at most one intervention (
0:1
). - At any given time, each incident can be involved in any number of intervention (
0:*
). It could have any number of ambulance and paramedics teams at the scene, providing support.
Many n-ary associations can be represented using only binary associations. For example, we could model the relations between ambulance, paramedics team and incident of Figure 17.11 using binary relations as in Figure 17.12:
Aggregation and Composition
UML includes two special types of associations—aggregation and composition—which have predefined names and meanings. For domain conceptual modeling, I prefer to avoid these generic (and often ambiguous) associations and use domain-specific associations instead. However, feel free to use them if they are appropriate for your context.
Attributes and Value Types
Figure 17.13 show two ambulance attributes, location
and status
together with the declaration of their value types.
An entity’s attribute value may change over time. For example, Table 17.2 shows the attribute values of ambulances amb1
and amb2
at times t0
and t1
:
Time t0 |
Time t1 |
---|---|
amb1.location = loc1 |
amb1.location = loc3 |
amb1.status = "mobilised" |
amb1.status = "at scene" |
amb2.location = loc2 |
amb2.location = loc2 |
amb2.status = "available" |
amb2.status = "allocated" |
Attributes on Associations
Associations can also have attributes.
Figure 17.14 shows the IsAttending
association with two attributes.
Mathematically, this association and its attributes define:
- a relation
IsAttending
\(\subseteq\)Ambulance
\(\times\)Incident
- a function
arrivalTime
:Ambulance
\(\times\)Incident
\(\to\)Time
- a function
departTime
:Ambulance
\(\times\)Incident
\(\to\)Time
Naming Guidelines
For attributes:
- For a non-Boolean attribute, use a noun phrase in the singular or plural form.
- For a Boolean attribute, use a phrase in the form isX or hasX.
- Attribute names must start with a lower case. Use either:
- Camel case: subsequent words capitalized and joined without separators (eg.
arrivalTime
), or - Snake case: all words in lowercase, separated by underscores (e.g.
arrival_time
).
- Camel case: subsequent words capitalized and joined without separators (eg.
For value types:
- For value types, use a singular noun or noun phrase with all capital letters (e.g.
DATE
,POSTCODE
,LOCATION
). - For Boolean value types, unless stakeholders are familiar with the term Boolean, use explicit and familiar values such as
TRUE/FALSE
orYES/NO
.
Examples:
Verbalization:
To verify that attribute names are valid, check whether the following sentences make sense:
- For a non-boolean attribute
att
: “an e has an att” (e.g. “An ambulance has a location”) or, if the attribute is optional, “an e may have an att” (e.g. “a person may have a middle name”). - For a Boolean attribute: “an e is X or not” or “an e has X or does not have X”.
Defining Attributes
An attribute can be defined within the textual specification of the entity type or association it belongs to, as follows:
Entity
Ambulance
Definition: A vehicle used for responding to medical emergencies and managed by the ambulance service.
Attributes:
location: LOCATION
— The ambulance’s current location.status: AMBULANCE_STATUS
— The ambulance’s current operational status, as determined by the ambulance paramedics:
Available
– Ready to be mobilized to an incident.Mobilized
– En route to an incident but not yet on-site.AtScene
– Actively providing care at the incident location.LeftScene
– Departed the incident location but not yet available.OutOfService
– Unavailable due to maintenance, breakdown, or other reasons.
Specifying which actor determines the attribute’s value is often necessary to clarify its meaning. In the example, the ambulance status refers to the actual status determined by the ambulance paramedics–not the status recorded in the computer aided dispatch software.
Specialization
Since E1 is a specialization of E2, every instance of E1 inherits all attributes of E2, and can participate in all associations where E2 is involved.
The graphical notation uses a solid line with a hollow arrowhead pointing to the general entity type.
E1
is a specialization of E2
(the IsA label is optional)If an entity type has multiple specializations, the arrowheads can be combined, as in Figure 17.15.
Glossary
A domain glossary can be derived from the textual specifications for all entity types and associations.
There is no standard format for these textual specifications or the domain glossary itself.
When shared with business stakeholders, the domain glossary may exclude modeling keywords to present domain terms and definitions in a more conventional manner. For example:
Glossary of Terms
Ambulance
A vehicle used for responding to medical emergencies.
An ambulance has the following attributes:
location
: The ambulance’s current location.status
: The ambulance’s current status, as determined by the ambulance paramedics:
Available
– Ready to be mobilized to an incident.Mobilized
– En route to an incident but not yet on-site.AtScene
– Actively providing care at the incident location.LeftScene
– Departed the incident location but not yet available.OutOfService
– Not available due to maintenance, breakdown, or other reasons.AtIncidentScene links ambulances to incidents
An ambulance is at the incident scene when it is stopped at or near the incident’s location, and its paramedics team is attending to the incident.
…
17.3 Modelling Guidelines
Although most software engineers and computer science students are familiar with the notation, many struggle to create effective domain conceptual models. This section provides guidelines to simplify the process. Once mastered, conceptual modeling becomes far easier—and immensely rewarding.
General Guidelines
Remember the model’s purpose and audience. The primary goal of a domain conceptual model is to clarify domain concepts. The model should:
- facilitate communication with stakeholders;
- help the development team understand the application domain’s concepts and terminology.
The following general guidelines support these goals.
Focus on the Domain, Not the Implementation
- Model the world, not an object-oriented design of the software.
- Avoid implementation-specific concerns.
Model the Essence of the Domain
- Focus on timeless concepts rather than specific technologies.
- Model domain concepts as if capturing them across time.
The essence of the domain is independent of technologies and remains the same across time. To identify this essence, think about the domain as it was in the past (before computers), as it is today (with current technology), and as it might be in the future (regardless of technological changes). This will help you identify timeless concepts that are independent of specific technologies.
For example, the fundamental concepts of ambulance dispatching remain the same whether dispatching is done manually, semi-automatically, or fully automatically, and whether ambulances are horse-drawn carriages, human-driven vehicles, or autonomous units operated by paramedic robots.
Give Equal Attention to the Glossary and the Diagram
The glossary is often more accessible and beneficial to stakeholders than the diagram. Think of the diagram as a visual organization of the glossary.
Writing definitions can be challenging and tedious, but the process often uncovers critical ambiguities and misalignments in stakeholders’ concepts and terminology. If these issues go unnoticed, they can cause significant problems and miscommunication throughout the project.
Do not expect domain experts to provide well-formed definitions, or to agree on definitions. Clarifying concepts is part of the software engineering work.
Avoid getting stuck in debates over terminology. Instead:
- Identify when two terms refer to the concepts (synonyms).
- Recognize when a term has different meanings in different contexts. Techniques such as organizing the model by viewpoints or bounded contexts can help manage this, though these are beyond the scope of this chapter.
- Handle disagreements diplomatically by acknowledging differing interpretations. Do not rush to impose a resolution–give stakeholders time to adapt to new terminology and perspectives.
Model Creation Guidelines
This section outlines guidelines for developing a domain conceptual model.
Include Only Concepts Relevant to Goals and Scenarios
A key challenge when creating a domain conceptual model is deciding what to include and exclude. To guide this decision, follow these principles:
- Include all domain concepts necessary to describe:
- Desired behaviours (e.g., goals, requirements, domain scenarios).
- Undesired behaviours (e.g., obstacles, negative domain scenarios).
- Desired behaviours (e.g., goals, requirements, domain scenarios).
- Exclude concepts irrelevant to these behavioural descriptions.
In other words, a domain conceptual model should only contain concepts needed to express the properties and scenarios relevant to the domain. Therefore, it is often derived from—or developed alongside—other models, such as domain scenarios, goal models, and requirements formulations.
Derive Concepts from Goals and Scenarios
Since a domain conceptual model should include all concepts necessary to describe domain goals and scenarios, an effective way to construct it is to derive those concepts directly from the goals and scenarios.
Example: Consider the following domain goal:
“An ambulance must arrive at the incident scene within 14 minutes after the first call reporting the incident.”
Figure 17.16 includes all domain concepts relevant to this goal while excluding unrelated ones:
- “An ambulance …” → Refers to the entity type:
Ambulance
. - ” … must arrive at the incident scene …” → Refers to:
- the association
AtIncidentScene: Ambulance -> Incident
, and - the entity type
Incident
.
- the association
- “… within 14 minutes after the first call reporting the incident.” → Refers to:
- The entity type
Emergency Call
. - The association
Reporting: Emergency Call -> Incident
. - The 14-minute requirement refers to the duration between:
- the time of the first call reporting the incident (
time
onEmergency Call
), and - the arrival time of the first ambulance at the scene (
arrivalTime
on theAtIncidentScene
association).
- the time of the first call reporting the incident (
- The entity type
Reveal Implicit Concepts to Improve Goals Formulation
Domain conceptual models are often developed alongside goals and requirements—rather than being derived from them.
Initial expression of goals or requirements are often vague, relying on imprecise terminology. Key domain concepts and terms may be implicit in the original wording. By explicitly identifying these concepts, we can uncover which domain concepts are relevant to the stated property. Once these concepts have been uncovered, the original goal or requirement can be reformulated into a more precise and well-grounded statement.
Example: Consider the following informal statement about ambulance dispatching–it might be something a stakeholder says during an elicitation workshop or interview:
“When a call comes in, the person handling the call will figure out which ambulance is best to deal with the issue.”
To reformulate this statement, we first identify the implicit domain concepts:
- “When a call comes in” → Refers to an entity type:
Emergency Call
. - “The person handling the call” → Refers to a standard role:
Call Handler
(an actor). - “Figure out which ambulance is best to deal with the issue” → Implies several key concepts:
- The issue is an
Incident
. - The best ambulance likely means the nearest available ambulance, thereby implicitly referring to:
- The incident’s
location
. - The
status
andlocation
of all ambulances.
- The incident’s
- The issue is an
- “Figuring out which ambulance” → Refers to the action of allocating an ambulance to the incident, thereby referring to an association
AllocatedTo
linking ambulances to incidents.
Thus, we relate the original statement with the following domain concepts:
(Note: The actor Call Handler
is not part of this model—it appears instead in the actor table of the context diagram–see Chapter 16.)
Using these domain concepts, we reformulate the original statement into the more precise sentence:
“When an emergency call reports an incident, the call handler allocates the nearest available ambulance to the incident.”
This process of deriving domain concepts from a vague formulation is commonly used to refine the expression of goals and requirements.
Derive the Model Incrementally
A common and efficient way to construct a domain conceptual model is to build it incrementally—deriving concepts sentence by sentence.
If you’re working with goal modeling, start by defining a goal, then derive relevant concepts from it, and improve the goal’s formulation based on those concepts. As you refine the goal into subgoals, extract concepts from each subgoal and, if needed, improve their formulation using the derived concepts (see Figure 17.18).
The same approach applies to scenarios: derive domain concepts one scenario at a time, and within each scenario, one step at at time.
Model Validation Guidelines
This section describes the key tasks involved in validating a domain conceptual model.
Check Completeness and Relevance with Respect to Goals and Scenarios
Evaluating the completeness and relevance of a domain conceptual model must always be done in relation to a specific set of domain goals and scenarios. In this step, we verify the following:
- Completeness: The model includes all concepts referenced in the domain goals and scenarios.
- Relevance: The model omits any concepts not mentioned in the domain goals or scenarios.
In other words, a domain conceptual model should always be assessed in the context of the goals and scenarios it is intended to support. Without this context, it is meaningless to judge whether the model is complete or whether all included concepts are relevant.
Validate the Model against Concrete Instances
A domain conceptual model can also be validated by testing it against concrete instance–entities and association link–that the model should be able to represent. The concrete instances may be part of a domain scenario or stand alone.
Consider again the model in Figure 17.1 shown at the start of the chapter and reproduced here:
We can validate this model by assessing whether it can describe all instances in the following scenario:
- An incident occurs at 10 Downing Street.
- A first emergency call reports the incident at 9:00.
- A second emergency call reports the incident at 9:03.
- A third emergency call asks for progress about the incident at 9:10.
- An ambulance arrives at the incident scene at 9:12.
- A second ambulance arrives at the incident at 9:15.
The first three steps can be represented by the model:
- Step 1 refers to
Incident
and itslocation
attribute. - Steps 2 and 3 refer to
Emergency Call
, itstime
attribute, and itsReporting
association withIncident
.
However, the fourth step introduces a new consideration. Here, an emergency call asks for progress about an ongoing incident. Is this situation covered by the model? Can we say that this third emergency call is linked to the incident through the Reporting
association? That seems incorrect because the call is not reporting the incident—it is requesting an update. Therefore, we may need to introduce a new association, EnquiresAbout: Emergency Call -> Incident
, between emergency calls and incidents.
Finally, steps five and six reveal another missing concept. These steps refer to the time at which an ambulance arrives at the incident scene, suggesting the need for an arrival_time
attribute in the AtIncidentScene
association.
Verbalize The Model
Another way to validate a domain conceptual model is to verbalize it (using the verbalization patterns of Section 17.2) and check whether the sentences are both grammatically correct and represent the domain accurately.
For example, verbalizing the model in Figure 17.1:
- The entity type
Emergency Call
is the set of all emergency calls. - An emergency call has a date and time.
- An emergency call is reporting at most one incident.
- The entity type
Incident
is the set of all incidents. - An incident has a location.
- (etc.)
This approach provides a quick way to verify that concept names are meaningful and understood by stakeholders. It is effective for validating concept names but less effective at revealing missing concepts. It should therefore be used as a complement—not a replacement—for validating the model against concrete instances and ensuring it captures all the concepts required to define the domain goals and scenarios.
Common Modelling Dilemmas
There are several common modelling dilemmas that students and beginners face when developing conceptual models. These are typical situations in which they need to make modelling decisions but are unsure how to proceed. One of the most frequent dilemmas is choosing an appropriate association name. The guidance on naming associations in Section 17.2.4.1 was written to address this challenge. This section provides guidance on how to address other common dilemmas.
Choosing Between an Association and an Entity Type
A common dilemma is deciding whether to represent a concept as an association or an entity type.
For example, consider a customer renting a car. This concept could be modelled in two ways (see Figure 17.19):
- As an association
Renting: Customer -> Car
- As en entity type
Car Rental
with separate associations linking each car rental to a customer and a car.
Figure 17.20 shows the general case of this dilemma.
Mathematically, the difference is as follows:
- If you model a concept C as an association
C: E1 -> E2
, then for any two entitiese1
ande2
, there can be at most one association link(e1, e2)
inC
. - If you model
C
as an entity type, you can have multiple instances ofC
betweene1
ande2
.
Another crucial difference:
- If you model C as an association
C: E1 -> E2
, the association can have attributes but cannot participate in other associations. - If you model C as an entity type
C
, it can have attributes and participate in associations.
Example:
- If we model car rental as an association
Renting: Customer -> Car
, there can be at most oneRenting
link betweencustomer_x
andcar_y
. Even if the customer rents the same car multiple times (e.g., returns it and rents it again), our model would still represent both rentals with the same link(customer_x, car_y)
. - If we model car rental as an entity type
Car Rental
, each rental is a distinct instance. Thus, two separateCar Rental
entities would exist forcustomer_x
rentingcar_y
on different occasions.
In this case, modelling car rental as an entity type is the better choice because:
- It more accurately reflects the domain (a customer renting the same car multiple times are distinct rentals).
- It allows for clearer modeling of a car rental’s attributes (
pickup_time
,return_time
) and associations (PickupStation, ReturnStation: Car Rental → Rental Station
).
Guideline
When deciding whether to model a concept C as an association C: E1-> E2
or an entity type C
with associations to E1
and E2
.
- Model
C
as an association if:- your model does not need to distinguish multiple instances of
C
linking the same entitiese1
ande2
, and - your model does not need associations involving C.
- your model does not need to distinguish multiple instances of
- Model
C
as an entity type if:- your model needs to distinguish multiple instances of
C
linking the same entitiese1
ande2
, or - your model requires associations linking C.
- your model needs to distinguish multiple instances of
Simple Test: To decide whether your model needs to distinguish multiple instances of C, ask:
Does it make sense to count the number of C instances between e1 and e2?
- If yes (e.g. counting rentals between a customer and a car), model C as an entity type.
- If no, model C as an association.
Trade-off: Accuracy vs Simplicity. The decision also depends on your model’s audience and purpose:
- In early phases (foundation, exploration, decision), you might prefer simplicity and model C as an association-even if an entity type would be more accurate. In such cases, consider adding a note to the association’s textual specification to indicate this simplification.
- In the later phases (formulation, quality assurance), you might prioritize accuracy by extending the model to include C as an entity type. In some cases, your model might include both an association
C_verb: E1 -> E1
and entity typeC_noun
.
Choosing an Attribute Value Type
Another common dilemma is selecting an appropriate value type for an attribute.
For example, in the car rental domain, this might involve choosing the value type for a car’s odometer_reading
(mileage) and the distance_travelled
during a rental. It might also involve choosing the value type for a customer’s name
and passport_number
.
A common beginner’s mistake is to use to a predefined programming data type, such as int
, float
, double
, decimal
, string
, and boolean
. These programming data types are rarely meaningful to stakeholders. For numerical attributes in particular, they obscure important information–such as whether the car’s odometer_reading
is expressed in miles or kilometers. Moreover, selecting a programming data type is an implementation decision that should be guided by domain requirements, not made prematurely before those requirements are fully understood.
A better approach is to reuse or define a domain data type:
- For numerical attributes, consider specifying either a unit or an abstract data-type that encapsulates and supports multiple unit representations. For example, instead of
odometer_reading: decimal
, useKM
orMILES
, depending on whether the reading is given in kilometers or miles. Alternatively, use an abstract data type such asDISTANCE
that can support multiple units. For unit-less attributes, use appropriate mathematical types such asWHOLE_NUMBER
,INTEGER
,REAL_NUMBER
. - Instead of a generic
string
type, consider a more informative, domain-specific type. For example:- For a car’s registration number, use
VEHICLE_REGISTRATION_NUMBER
orLICENSE_PLATE_NUMBER
. - For an ambulance’s operational status, use
status: AMBULANCE_STATUS
. - If the attribute truly represents free-form text, use a type like
TEXT
rather thanstring
.
- For a car’s registration number, use
- For Boolean attributes, since many stakeholders may not be familiar with the term “Boolean”, consider using
TRUE/FALSE
orYES/NO
instead.
Deciding between Value Type and Entity Type
Another common dilemma is deciding whether to model a concept as a value type or an entity type.
For example, consider a free-floating car rental system, where users can pick up and drop off cars anywhere within a city, without returning them to a fixed station. Each rental has a pick-up location and a drop-off location. The question is whether the concept of Location
should be modeled as a value type or an entity type. The resulting models are shown in Figure 17.21.
Location
as a value type or an entity type.
There are two crucial differences between a value type and an entity type.
- Difference in Meaning: an entity is a “thing” with a distinct and independent existence whose characteristics may change over time. In contrast, a value is immutable—if it changes, it becomes a different value. For example, the number 5 is a value; if it changes, it is no longer 5. An ambulance, however, is an entity: its location and status may change over time while it remains the same ambulance.
- Difference in Modeling: an entity type can have attributes and participate in associations, whereas a value type is only used as the type of an attribute. A value type cannot have attributes or participate in associations. Because a value is immutable, it does not make sense to define attributes or associations on value types.
In this case, Location
should be modelled as a value type because:
- a geospatial coordinate cannot change without being a different coordinate, and
- a geospatial coordinate does not have attribute or participate in associations.
In a different situation–if rentals must be picked up and dropped off at designated rental stations with fixed locations, typically at airports, train stations, and city centers–we would introduce an entity type Rental Station
with a location
attribute, as in Figure 17.22. In this model, Location
remains a value type, not an entity type.
Rental Station
as an entity type
Here, Rental Station
must be an entity type because:
- a rental station might have characteristics that change over time, and
- we need our model to support
Car Rental
attributes (e.g.number_cars_available: COUNT
) and associations (e.g.PickUpLocation: Car Rental -> Rental Station
).
Guideline: To decide whether a concept C
should be modelled as a value type or entity type:
- Model
C
as an entity type if:- Its instances have a distinct identity that persists over time, even as their characteristics (attributes or associations) change.
- You need to define attributes or associations for
C
.
- Model
C
as a value type if:- Its instances are immutable—changing any characteristic results in a different value.
- You do not need to define attributes or associations for
C
; it is only used as the type of an attribute.
17.4 Common Mistakes
This section discusses common mistakes that occur in domain conceptual models created by students or novice modellers.
Mistake 1: Failing to Use Established Domain Terminology
A common mistake is relying on computer science jargon or inventing new terms, instead of using standard domain-specific terminology.
Figure 17.23 illustrates an incorrect model alongside a corrected version.
In cases where established domain terminology is lacking, it may be necessary to introduce new concepts and terms. When doing so, ensure that the new terms describe phenomena in the application domain using language that is meaningful to domain stakeholders.
Mistake 2: Modeling the Implementation Instead of the Domain
Another common mistake is polluting the domain conceptual model with implementation concerns—such as adding methods to entity classes or including implementation-specific classes. This often results in models that are overly large, complex, and difficult to understand.
Avoiding this mistake is straightforward once you remember that the model’s purpose is not to produce an object-oriented design of the software (which can be done separately), but to define the domain’s core concepts and terminology. To keep the model simple and meaningful for stakeholders:
- Do not include object-oriented design classes—such as event publishers, event handlers, adapters, UI controllers, thread controllers, or exception types.
- Do not add methods to entity types—deciding which class performs which function is an implementation concern, not a requirements engineering task.
Mistake 3: Modelling Actions as Associations
A common mistake is to model an actor’s actions as associations. This leads to two main problems:
- It pollutes the domain conceptual model with information that belongs in other models, such as domain scenarios or context diagrams.
- It often results in a domain conceptual model where the actual associations are missing.
For example, consider this brief system description for an ambulance dispatching system:
When an emergency call is received, the Computer Aided Dispatch (CAD) system shall:
- direct the call to a call handler;
- allow the call handler to record details about the reported incident;
- support the call handler in allocating an ambulance to the incident.
Figure 17.24 shows a domain conceptual model derived from this description that illustrates the mistake:
This model includes relevant entity types–Emergency Call
, Incident
and Ambulance
–but its associations represent actions, not static association links between entities. It includes information about which actor performs which actions, which is irrelevant in a domain conceptual model. In larger models, such information is not only irrelevant but also harms understandability. Finally, this model lacks the actual associations among the relevant entity types.
Figure 17.25 shows a more appropriate domain conceptual model derived from this system description. Note how this revised model does not specify which actors controls the association links (e.g., which actor allocates emergency calls to call handlers or ambulances to incidents). Such information would instead by captured in the context diagram.
While Figure 17.24 illustrates an extreme case in which all associations are problematic, the same mistake can occur in models where only a few associations represent actions while others represent genuine static links.
This mistake has two main causes:
- Learners’ initial difficulties in understanding the differences and complementary roles of domain conceptual models, context diagrams, and domain scenarios. This mistake is closely related to the confusion between context diagrams and domain conceptual models discussed in Section 16.4.3.
- Longstanding heuristics for generating a domain conceptual model from natural language, which suggest extracting noun phrases as candidate entity types and verb phrases as candidate associations. When applied uncritically—whether by humans or automated model extraction tools—such heuristics tend to produce models riddled with this mistake.
To avoid this mistake, revisit the advice on distinguishing context diagrams from domain conceptual models in Section 16.4.3, and complete the exercises at the end of this chapter (coming soon).
Mistake 4: Using an Entity Type as Attribute Value Type
Another common mistake is using an entity type as the value type of an attribute. In early literature on object-oriented design, this is also referred to as “using attributes as pointers”.
Figure 17.26 illustrates this mistake. At the top of the figure, the mobilization of an ambulance to an incident is incorrectly modeled as an attribute mobilizedTo
, which refers to the Incident
entity type. The correct approach is to model this relationship as an association Mobilized To: Ambulance -> Incident
, as shown at the bottom of the figure.
This mistake is easy to detect and correct: whenever an attribute’s value type refers to an entity type, it should be replaced with an association.
17.5 Notes and Further Reading
This chapter’s description of domain conceptual modelling is partly based on the presentation of object models in the KAOS goal-oriented method in Chapter 10 of Axel van Lamsweerde’s book (Lamsweerde 2009). A brief overview of the KAOS object model can also be found in my PhD thesis (Letier 2001).
The presentation here simplifies certain aspects of the KAOS object model and refines the modelling guidance. These refinements are informed by my own experience as well as by research on practitioners’ pain points (Valle, Sales, Guerra, Daneva, Guizzardi, et al. 2025) and students’ difficulties (Rosenthal, Strecker, and Snoeck 2023) in developing domain conceptual models. The research on practitioners’ pain points addresses many more issues than those discussed in this chapter.
The naming guidelines and verbalisations are adapted from the work of Aguilera, Gómez, and Olivé (Aguilera, Gomez, and Olive 2013), with minor modifications, most notably the addition of more specific and restrictive guidance on association names.
How to manage large domain conceptual models is critical in practice but has been omitted from this chapter.
- To manage model size, one effective approach is to slice the domain conceptual model by goals—that is, by showing only the domain concepts related to a goal, its subgoals, and associated domain scenarios (Lamsweerde 2009).
- To handle complex domains where key terms vary in meaning depending on context, two related techniques can be used: viewpoints from requirements engineering research (Finkelstein et al. 1992; Kotonya and Sommerville 1996), and bounded contexts from domain-driven design (Evans 2004; Vernon 2016). Both approaches make explicit the context to which a model applies, enforce terminological consistency within each context, and allow terms to have different meanings in different contexts. Relationships between contexts—such as mappings or translations—can then be defined to clarify how concepts relate across context or viewpoint boundaries.
Another important omission is the reuse of established domain conceptual models. Many domains have well-established conceptual models or ontologies that can—and sometimes must—be reused rather than being developed from scratch. Some industries have standard conceptual models that you must take into account.
Researchers are exploring the use of machine learning and large language models (LLMs) to generate domain conceptual models from natural language statements, e.g. (Arora et al. 2019; Saini et al. 2022; Chen et al. 2023; Bragilovski et al. 2025). The future practical utility of these tools may depend on their ability to support an incremental, interactive process in which domain conceptual models are developed alongside improvements to the natural language statements, as outlined in our modelling guidance. This process would also involve generating and negotiating suitable concept definitions—-one of the most challenging yet crucial aspects of conceptual modelling in practice (Valle, Sales, Guerra, Daneva, Silva Santos, et al. 2025).
Given that LLMs can generate plausible yet often flawed domain conceptual models, it is crucial for students to develop model evaluation skills alongside model creation skills (Snoeck and Pastor 2025).