A Blog about Business, Enterprise Architecture and Software Design by the Founders of ZenModeler

Domain-Driven-Design Distillation: Support, Generic and Core Domain

Distillation is a procedure whereby the components of a mixture are separated in order to extract the various ingredients, particularly the most valuable one: the “heart” of the distillate.

The domain represents knowledge of the subject matter; the work of a company, in which its employees are engaged. Distillation, a thought-process stemming from Domain-Driven Design, enables us to classify the domain of a company as belonging to one of three categories and we can do it without alcohol! The chemical analogy is enlightening because it focuses on isolation of the component that is most valuable for the company: the “core domain”.

What is the Core Domain?

The core domain is the part of the domain most closely associated with the strategy of the company.

Definition of Strategy

I offer the following definition for the strategy of a company:

Strategy refers to objectives as a function of environment and available resources, followed by the allocation of these resources, in order to create value for customers while simultaneously creating profit for the company and its employees.

A few remarks concerning this definition:

  • A well-defined strategy must outline the priorities around which employees concentrate their time and effort
  • Profit certainly means financial gain, but it also includes job satisfaction and career advancement for the employees, with similar benefits for the customers. “Don’t be evil,” as they say.
  • Strategy is dynamic; it is changing or will change over time because the environment is changing, and with it the objectives

What is a Support Domain?

A support domain is a part of the domain that indirectly supports the core domain without actually belonging to it.

Typically, this is a thing that everyone needs, yet no one wants to pay for. The reason is that the value added, taken in isolation, is weak. For example, bookkeeping is indispensable in many banking activities, but no one wants to pay for it.

What is a Generic Domain?

A generic domain is one that is universally well-known, without any need for specialization in the core domain.

Some classic examples are accounting, human resources, and project management. These domains are widely known, sometimes even including their various sub-fields. In technical terms, this could for instance be an optimization tool for finding a path in a graph (and many problems, I might add, can be boiled down to a graph). Options to consider here, naturally, would be open source, software packages, outsourced development, and, lastly, in-house development. In this latter case, it would be pertinent to ask the following questions: Is it worth my while to write the software? Why not purchase it off-the-shelf? Why not outsource it?

A Few Examples

Amazon and eBay Rankings

Amazon and eBay both have ranking functionality integrated into their sites; I am referring to the famous “stars.” On Amazon, ranking is associated with a product, such as books or CDs. On eBay, ranking is associated with a seller. In both cases, the domain is virtually the same: an evaluation and a comment, a ranking of these evaluations and an average.

Nevertheless, Amazon and eBay have different business models. For Amazon, it is to sell new products, often subcontracted to professional third-party merchants. For eBay, the basic business model is the sale between individuals; in this domain, a key element, and a strategic one, is the level of confidence between buyer and seller. Ranking therefore acquires a strategic interest for eBay because it forms a part of its strategy of establishing maximum confidence between customers. This is not the case for Amazon. Ranking is therefore part of eBay’s core domain; for Amazon, it belongs to the support domain because rather than playing a direct role in Amazon’s strategy, it is only a support function.

Still considering the same sector of activity, Amazon’s logistic domain is probably within the core domain because rapid and efficient delivery is a strategic advantage.

The Banking Sector

In the banking sector, functions related to bank accounts (debit, credit, calculation of balance) are part of the support domain; this is an indispensable function for which no one is prepared to pay. As a result of the subprime crisis, risk management is once again strategic; risk management therefore has become, for the moment, the core domain.

Management of Time Zones

In his work, Eric Evans discusses, as part of a project for an insurance company, the use of a management component for time zones (in order to correctly gauge the exact moment that a loss occurs, the U.S. having several time zones.) The developers handled this component quite thoroughly, being that it was the sort of well-defined task so dear to the heart of an engineer. The result was a bundle of functionality. This turned out to be a poor utilization of resources, as none of the conversions were attained; nothing but storage. And the main outcome was negative: neglecting the core domain, namely insurance. Management of time zones is a generic domain.

Why Make a Distinction Between Different Types of Domain?

During the conceptualization of a large-scale system, numerous components are implemented and put into operation. All of these components certainly have a role and participate in the success of the system in its totality. Nevertheless it is very easy to lose sight of the essential functions of the system. On the other hand, the harsh reality is that all parts of the system cannot benefit from a spotlight on quality because resources are finite! It is crucial to concentrate on the core domain; in practical terms this means mobilizing the best members of the team—by the way, why are the best people always assigned to the most technical part of the project?

Given a choice between two methods of refactoring, the one that most improves the core domain should be preferred. Because of these elements, rarely can the core domain be implemented using off-the-shelf software. In the end, it is best to avoid an external assessment of the core domain, as this knowledge builds itself over time.

What, may I ask, is your own core domain?