Aligning organisational and technical boundaries with the organic boundaries of a problem domain to create autonomous teams enables organisations to innovate faster by making decisions faster, implementing ideas faster, and getting customer feedback faster. Guided by the strategic principles of Domain-Driven Design, software developers and stakeholders collectively can play a key role in leading the transformation of their organisation towards greater autonomy.
Instead of naively chopping up a system into arbitrary small pieces and calling them ‘microservices that implement bounded contexts’, or merely thinking cross-functional teams will suffice, deeper – more nuanced design skills are needed. All domains are different – there is no flowchart that guides teams into knowing exactly how to break up a large system into smaller pieces that minimise the costs of handovers and shared dependencies.
Strategic Domain-Driven Design introduced the concept of subdomains; things that change together for business reasons. Accordingly, teams that own things that change together for business reasons will own more decision making and have more autonomy.
Traditionally, Domain-Driven Design has encouraged use of language as a way to identify the boundaries between things that change together. Whilst language is still a key heuristic, there are many others, in particular the flow of work through an organisation. Subsequently, by supplementing the design of teams and services with the the goal of eliminating bottlenecks in an organisation, Theory of Constraints provides a powerful mindset for determining good microservice and team boundaries.