Getting the what? what does ‘ubiquitous language’ mean and have to do with software development?

First, we have the definition found in the Domain Driven Design community page:

“[Ubiquitous Language]] A language structured around the domain model and used by all team members to connect all the activities of the team with the software.”

Simply put, ubiquitous language is a group of words/sentences that is both developed and shared between software developers and domain experts aimed at reducing misunderstandings and confusions during all stages of the software development (the term ‘ubiquitous language’ was coined by Eric Evans and even though is associated with Domain Driven Design its application and usability can span across all practices).

What are the advantages of using Ubiquitous Language?

The advantages are, to name a few:

  1. Simplicity: by using a shared name for an object (or a business rule, etc) both teams (developers and users) can speak the same language avoiding confusions.
  2. No mental translation that can lead to errors: by calling things by a unique name we avoid having to translate from the word used by the domain experts to the word we use as developers (an example of this would be the term ‘receipt’, which can referred to in a different way by an accountant etc)
  3. Code re-factoring that uses ‘Ubiquitous Language’ can be easily understood by the entire team: how many times as developers we have felt the urge or re-factoring but are short of ideas on how to name our newly created methods? if we stick to the  ‘Ubiquitous Language’ and avoid using synonyms we’ll save ourselves a great deal of confusion later on.

Some valuable resources I found on this topic are:

 

Do you have an experience where using Ubiquitous language has saved you a great deal of pain?