Metaphors in Domain-Driven Design: A Double-Edged Sword

Masoud Bahrami
6 min readAug 31, 2024

--

part one

Let’s start with some definitions:

A metaphor is a figure of speech that, for rhetorical effect, directly refers to one thing by mentioning another. It may provide (or obscure) clarity or identify hidden similarities between two different ideas. Metaphors are usually meant to create a likeness or an analogy.

Wikipedia

Metaphor-generated by Substack AI image generator

In the book “Metaphors We Live By” by George Lakoff and Mark Johnson, a metaphor is defined as a conceptual mapping between two domains of experience. This means that we often understand one concept in terms of another, even if they are not literally related. For example, we might understand time as a “resource” or “commodity” because we map it onto our experiences with physical resources.

… a metaphor is a conceptual mapping between two domains of experience.

In Extreme Programming (XP), Metaphor is also one of the key practices of XP. It’s defined as a shared language or mental model that helps a development team understand and communicate about the domain they are working on. It provides a conceptual framework that guides development and decision-making.

Sometimes metaphor is a necessity. For example in cases that the things are not actually exist in real-in physical world, in case of pointing them, we have to use a metaphor for them. Time and Date are one the most and famous and well-known metaphor that, eventually have been became the real or the fact. Sometimes we mistakenly think that there is real thing like time or date.

Metaphors in Software Development

Metaphors are powerful tools in software development, providing a shared language and mental model that can guide design, communication, and problem-solving. Here are some examples of metaphors commonly used in the context of software development:

Architectural Metaphors

  • Layered Architecture: This metaphor compares software to a layered cake, where each layer has a specific role and interacts with the layers above and below it.
  • Microservices Architecture: This metaphor likens software to a collection of small, independent services that communicate with each other through APIs.

Metaphors permeate the fabric of software development. From the fundamental data structures we employ — arrays, queues, stacks, trees — to the organizational structures we adopt, metaphors play a pivotal role. Consider how we often describe our organizations as having a “head” or a “headquarters,” drawing parallels to biological or geographical entities.

Metaphors Frame our Way of Thinking

Metaphors are more than just literary devices; they profoundly shape our understanding of the world. They act as cognitive lenses, filtering our perceptions and influencing how we think, reason, and act. By mapping unfamiliar concepts onto familiar ones, metaphors provide a framework for understanding complex ideas and experiences.

For example, the metaphor “time is money” suggests that time is a valuable resource that can be spent, saved, or wasted. This metaphor influences our behavior, leading us to value efficiency and productivity. Similarly, the metaphor “life is a journey” implies that life is a linear progression with a clear beginning, middle, and end. This metaphor can shape our expectations and goals, influencing our decisions and actions.

Another example of how metaphors frame our thinking is the metaphor “love is a battlefield.” This metaphor suggests that relationships are inherently conflictual and require constant struggle and effort. It can influence our expectations of relationships, leading us to believe that love is always accompanied by challenges and sacrifices.

However, this metaphor can also limit our understanding of relationships, as it may not account for the possibility of harmonious and fulfilling partnerships. By challenging this metaphor and exploring alternative ways of understanding love, we can expand our perspectives and open ourselves up to new possibilities.

Example of Metaphors in the Context of Software Development

Consider the metaphor “software development is like building a house.” This metaphor can be effective in conveying the idea that software development is a complex process involving planning, design, construction, and testing. However, the effectiveness of this metaphor depends on the specific context of the project.

Metaphor as a Facilitator of Context Understanding is actually Context-Dependent

Metaphors are powerful tools for communication, but their effectiveness can vary significantly depending on the cultural, historical, and individual factors at play. A metaphor that resonates with one group may be completely unfamiliar or even offensive to another, and a metaphor that is meaningful within a specific domain may be less effective in others. Therefore, it is crucial to carefully consider the context in which a metaphor is used to ensure that it effectively facilitates understanding.

For example, the metaphor “life is a journey” might resonate strongly with someone who has experienced significant life changes, but it might be less meaningful to someone who has lived a relatively stable life. The effectiveness of a metaphor depends on the specific context, including cultural background, personal experiences, and the domain being discussed. A metaphor that is highly effective in one context might be completely ineffective or even misleading in another. It’s essential to be context-agnostic when evaluating the suitability of a metaphor, recognizing that its effectiveness is context-specific.

To ensure that metaphors are used effectively, it is essential to consider the specific context in which they are employed. By understanding the cultural, historical, and individual factors that influence the interpretation of metaphors, we can choose the most appropriate ones to facilitate understanding and communication.

For example, in a project focused on agile development, a more appropriate metaphor might be “software development is like a journey,” emphasizing flexibility, adaptability, and continuous improvement. The “building a house” metaphor might not be as effective in this context because it suggests a more linear and structured process.

Therefore, it’s important to choose metaphors that are context-specific and align with the values and practices of the particular software development methodology.

From software development perspective, these days metaphors, are powerful tools in storytelling and communication, have found their way into software development. They can provide a common language and mental model for understanding complex domains. These inherent use cases or feature of metaphors make them a great tools for modelling and designing complex domains using DDD approach. But their use also comes with potential pitfalls.

The Paradox of Metaphors

While metaphors can be valuable tools for communication and understanding, they can also limit our thinking by forcing us to view things in a particular way. This can lead to oversimplification or misinterpretation of the concepts being conveyed. Their effectiveness can be heavily influenced by the specific context in which they are used.

Let’s run some examples in a payroll and accounting systems.

1. Financial Statements as “Snapshots”

The metaphor of financial statements as “snapshots” can provide a simple and intuitive understanding of their purpose.

However, for experienced accountants, this metaphor may be overly simplistic, as financial statements are actually a combination of historical data and future projections.

2. Double-Entry Accounting as a “Balancing Act”

The metaphor of “balancing act” can help visualize the concept of debits and credits as equal and opposite forces.

However, for accountants, this metaphor may oversimplify the complexity of double-entry accounting, which involves more than just balancing debits and credits.

3. Payroll as a “Production Line”

This metaphor can help visualize the sequential nature of payroll tasks, from collecting employee data to issuing paychecks.

However, in a remote work environment, the metaphor of a “production line” may not be as effective, as the traditional physical flow of work may not be applicable.

Another Example in the Real Life of Every Developer

Think about this metaphor: “Our organization/team is a family.” This metaphor can be helpful in fostering a sense of camaraderie and belonging among team members. However, it may not be as effective in a highly competitive environment where individual achievement is prioritized.

So as you can see, while metaphors can be valuable tools for understanding complex concepts in payroll and accounting, their effectiveness is highly context-dependent. It’s essential to choose metaphors that are appropriate for the specific audience and the level of detail required. Overreliance on metaphors can lead to misunderstandings and errors, especially in situations where the metaphor oversimplifies the underlying concepts.

End of Part 1

--

--

Masoud Bahrami
Masoud Bahrami

Written by Masoud Bahrami

DDD teacher and practitioner, software engineer, architect, and modeler. Specialized in building autonomous teams and services.

No responses yet