Mapping Business Capabilities to Services

One of the key questions around API strategy we get asked is how do we map business capabilities to services. An approach is to use domain driven design and build domain services, in this post we will look at what this looks like Capabilities Businesses domains offer capabilities. Given domains are classified into core, supporting…More

Iterative Domain Model Design: How to stay autonomous

One key question that I hear with Domain Modelling is how do you know if you have your transaction boundary right (so that you build the right aggregate)?  Hidden in this is another question – what if we got our domain aggregate wrong? We can take this further and ask In an agile world, given change…More

Domain Driven Design (DDD): Core concepts and Enterprise Architecture

If you are building or designing APIs, Microservices or integrating systems then Domain Driven Design (DDD) offers a valuable design technique for mapping business domains to build software services of value Using DDD is incredibly useful when designing services because it helps you rationalise the granularity of your software, the ownership boundaries and model interactions…More

DDD Context Mapping By Example: Customer Management and Customer 360

In the continuation from the previous post, here we look at how to do context mapping from sample real-world examples. In this post we look at how to model Customer Management from a customer support perspective and how Customer 360 would look like as a context map With this post, I hope to give you…More

DDD Context Mapping by example: Policy Management

DDD context mapping can be confusing without real-world examples. In this post we will model sample implementations for two scenarios using bounded context maps and learn to analyse the relationships from the maps. With this post, I hope to give you a fair idea of how to do apply DDD into build good distributed features…More

User Journey, User Story vs Domain Story: What’s the difference?

While running DDD workshops with clients, I have had this question come up several times – “What is the difference between a Domain story vs a User Story?” Here is a quick look at differences: User journey story: Is a technique for describing how the user interacts with our business (and business systems) over time…More

Recognising Software Monoliths: 7 key types

A monolith in software architecture a term used to describe some service that is large, complex and shared across different business functionalities. Changing any aspect of this can be daunting not just from an engineering standpoint but from a testing, delivery and release standpoint as well As teams look to decompose monolithic software into domain…More

Domain Service Design and Patterns

Domain services implement core logic for a business domain and are a relied upon by experience and consumer services. Domain services can be self contained and store the business logic and state or rely on an external provider system (translating from a “raw system format” to a “canonical” domain format) In this post we look…More

From Project to Product Teams: Implementing the Inverse Conway Move for better Software

Modern software engineering techniques within organisations deliver “distributed features” using agile techniques. These features are distributed across different systems and integrated to provide an end-to-end experience. Traditional project delivery brings in  members from different system oriented teams to deliver these features in a loose and ad-hoc fashion and dis-bands the team after a project is…More

Domains and Bounded Contexts: Examples from the industry

The Domain Driven Design (DDD) book and community use the language of Domains and Bounded Contexts. Often there is confusion around what is a Domain, Sub-Domain, Bounded Context and how do we tell the difference between one or other when we are in the trenches. This confusion can lead to poor design where our domain…More