Domain-driven design is a set of principles and patterns for focusing design effort on the core domain of an application. It involves creating a model that reflects the key domain concepts and then using that model throughout the software design and implementation. This includes using a ubiquitous language shared between technical and domain experts, elaborating the model through collaborative discussion, and representing the model through diagrams, specifications, tests and code.