Arjan sees AI tools like GitHub Copilot helping developers more effectively express the domain model in code, allowing them to spend more time on the higher-value domain modeling.
In this view, a key value developers provide is their strong system design skills and ability to map rich domain knowledge into a coherent software model.
Domain Driven Design (DDD) emphasizes developing a rich conceptual model (domain model) of the problem domain through collaboration between developers and domain experts.
The core idea is that developers can’t write good software for a domain they don’t understand deeply. DDD provides a framework for iteratively developing this shared understanding.
Key aspects of DDD include
binding the model and implementation from the start
cultivating a ubiquitous language
making the domain model knowledge-rich
distilling the core model
collaborative exploration through brainstorming and experimentation.
The code itself is seen as a temporary expression of the evolving domain model. As the domain insights improve, the code will change dramatically.
Developers should optimize for rapidly iterating on the domain model by writing flexible, low-coupled code that is easy to throw away and replace.