Learning Domain-Driven Design (DDD) — Part 2

Matteo Pampana
2 min readApr 1, 2023

--

Core, Generic, and Supporting Subdomains

If you missed Part 1, you can find it here.

Today I have learned a useful concept for taking strategic (software) decisions by analyzing the business domain.

You can split the business domain into three types of subdomains:

  • Core subdomains: they provide competitive advantages with respect to other competitors;
  • Generic subdomains: common solutions to common problems. They may be shared among competitors;
  • Supporting subdomains: they neither provide any competitive advantages nor are common or shared among competitors.

Why is it important to split a business domain into these three categories? Divide-et-impera. Knowing how your business is composed enables you to take strategic decisions on how you develop your product and how to assign your (usually limited) resources.

Core functionalities are better to be designed, developed, and maintained in-house. You do not want to share with the world your competitive advantages :) It makes sense to put your best engineering teams to work on these functionalities and to adopt best practices to make this part easy to change and maintain.

Generic functionalities are so common among different businesses that there are off-the-shelf solutions you can pick out. They do not provide a competitive advantage, but they are fundamental bricks of your business. For example, if you have users you must have an authentication subdomain. This is a common problem and there are plenty of out-of-the-box solutions out there to use. You generally purchase these parts.

Supporting functionalities help the business but do not create a competitive advantage with competitors. Unfortunately, they are not common and, usually, you will not find any off-the-shelf solution to purchase and forget. You have to develop them in-house, but, since they do not provide value, they are developed as best-effort activities and they do not require the best engineers in your company. They can be even outsourced.

I hope you will follow me and be an active part of this journey to mastering Domain-Driven Design. I would love to have some feedback from you.

Do you know some videos, some courses, or some amazing books that I can use as a reference to truly understand this subject? I am waiting for your suggestions! 💚

--

--

Matteo Pampana

Senior Software Engineer @ Adevinta 💻 Italian guy 🇮🇹 sharing with you what I am learning during my journey as a software engineer.