Naming — one of the hardest things in Software development
There are only two hard things in Computer Science: cache invalidation and naming things.
– Phil Karlton
I prefer to leave interfaces unadorned. The preceding I, so common in today’s legacy wads, is a distraction at best and too much information at worst. I don’t want my users knowing that I’m handing them an interface.
Clean Code, Uncle Bob Martin
We all struggle with naming on a day to day basis. What should we call a class, a function, a field or a table in the database? The fact that it is costly to change later. And the wrong namings add to the complexity because of the confusion it creates over time.
Ubiquitous Language
Ubiquitous Language is a technique to help you arrive at a common, shared language. A language that the developers and the domain experts/users use to communicate.
And, the common language helps the team to arrive at better names. The way to arrive at such a common language is through conversation.
Domain-Driven Design
Ubiquitous Language is one of the critical parts of Domain-Driven Design (DDD). The premise of DDD is initiating a creative collaboration between technical and domain experts. DDD helps to refine the models addressing the problems of a particular domain.
It is much deeper. The following mindmap should give you a quick overview and depth of this.
If done well Domain-driven design helps you move to Microservice Architecture.
Further reading
Ubiquitous Language — By James Shore
Domain Driven Design: Tackling Complexity Software in the Heart of Software
Pluralsight Course — Domain Driven Design Fundamentals
Pluralsight course — Domain Driven Design In Practice
An updated version of an earlier post published at www.multunus.com.