Large complex systems tend to be difficult to maintain. They never start out like that. They start small, sweet and innocent. However, the system evolves. Features are build on top of features. The world around it changes. Functional requirements change as business changes, but also the organisation, the teams and the people. When a system evolves into a monolithic style system, it becomes very difficult and expensive to adapt it to the altering world. By building the system as several smaller delimited systems that work together, you can create a system that better reflects the business and is more flexible to change.
Domain-Driven Design is a large topic and a study on itself. Applying all the concepts has a steep learning curve. It doesn’t always have to be difficult though. A few concepts can quickly enhance a project; one of them is Ubiquitous Language. What is it and why should your team create one?