Domain Driven Design and Distributed Domain Driven Design – we hear these terms often and many companies and technical teams want to jump on the band wagon but, how do they get started?
Often, a technical team will embark on the quest to find the “Holy Grail” that will solve a business’s rapid growth or transform and existing business that has to become more agile with a constantly changing business climate. Notice we use the term "business". This is where the discussion should begin.
Too often technical teams place their focus on the ‘technical’ implementations of DDD/D-DDD. Teams start with perceived domains and then begin to derive models, bounded context, context maps, and define ubiquitous language. Then begins the work of Defining entities for the models, value objects, aggregates, events, services, repositories, and factories; but, is the domain really correct? This is where we can go off the path and forget the important detail – the business. What is the business? What capabilities or functions does the business perform? Have we identified what our business is? Did we analyze aspects of the business that could, or better yet, should be transformed? Have we identified opportunities to expand the business? Have we avoided discussing the existing implementations and are we too focused on reusing what they provide – as in, is this implementation outdated? These topics are important as getting to this level first can identify what the business does and can help structure capabilities together. This is an iterative process and is designed to get a good start on what can become a series of domains. Will our domains be perfect the first time out? Doubtful. However, the truth of the matter is these domains can evolve and transform as time goes on. The domains need to be agile and should/will evolve as teams identify capabilities that will likely be in a new domain. This is the topic of our invite to the Austin DDD group. We will discuss team interactions (product management and technical teams) and how to get off on the right foot.