• 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.