Domain Driven Design (DDD) is a software development approach that involves focusing on the core domain and domain logic. It uses a ubiquitous language to ensure all elements of the system share a common conceptual model. The key elements of DDD include entities that have identities, value objects without identities, aggregates that group related entities and values, factories that construct complex objects, stateless services, modules that represent chapters of the domain story, and repositories that manage entities and aggregates storage and retrieval. The goal is to build software that is an explicit model of the domain it is describing.