Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
DDD: The Ubiquitous Language

Britain and America are two nations divided by a common language
(George Bernard Shaw / Oscar Wilde)

It could be said that the business and developers are two nations divided by a common language. If you listen to conversations between developers and the business guys they are writing code for, they seem to speak the same language, but often have entirely different meanings.

This disjoint is what the concept of the Ubiquitous Language (or UL) is intended to eliminate in Domain Driven Design.

The concept is simple, that developers and the business should share a common language, that both understand to mean the same things, and more importantly, that is set in business terminology, not technical terminology.

Developers have historically had a hard time with talking to the business – developers are by nature technical, and have a bad habit of letting their technical “geek” terms leak into their conversations. We are all guilty of it at the best of times.

The Ubiquitous Language in DDD is a negotiated language between the Domain Experts and the technical guys – but the rule is that the Domain Experts lead and the technical people follow. As the UL evolves, and this may take weeks or many months, the language becomes more and more refined.

Eric Evans has some good examples in his book of how the UL is drawn out of the conversations between the domain experts and the development team, so I won’t duplicate them here – suffice to say you should be listening to how your users and domain experts refer to things, and try and fit in with their language.

One thing to bear in mind here is that although the UL is drawn in the language of the business, it can also include things that might seem like technical terms.

A recent conversation on a DDD list discussed things like Paging and whether these belonged in the domain. Some people then decided that these were technical terms, and on their (IMO misunderstanding) reading of the book, they stated that words like Paging are technical terms and shouldn’t be in the UL

That assumption has two basic problems:

1) Users have adopted terms like Paging as their own. They know what Paging means … it is present in 90% of the applications and web pages they use. So Domain Experts adopt this language when expressing their requirements. They probably won’t use a term like Paging in regard to the domain, but they may well use it in their user stories, use cases or requirement documents. Whether this concept carries through to the domain is an implementation issue.

2) There are many technical terms that exist in the UL already, Eric listed them in the book. These are common pattern names, that the technical team introduce to try and help the Domain Experts formalise their concepts. So terms like Specification and Event may well appear in the UL.

The Ubiquitous Language is the foundation of Domain Driven Design, it is the basis on which your technical team can become part of the business, and work in their interests, rather than being see as “the geeks who sit in the corner and deliver buggy software” – don’t be two departments divided by a common language

Previously:

Domain Driven Design: A Step by Step Guide

Reference:

InfoQ Free eBook : Domain Driven Design Quickly

Domain-Driven Design: Tackling Complexity in the Heart of Software (Eric Evans)


Posted 02-09-2009 12:01 PM by Jak Charlton

[Advertisement]

Comments

DDD: The Ubiquitous Language - Casey Charlton - Insane World | cheapdirtdomain.com wrote DDD: The Ubiquitous Language - Casey Charlton - Insane World | cheapdirtdomain.com
on 02-09-2009 10:54 AM

Pingback from  DDD: The Ubiquitous Language - Casey Charlton - Insane World | cheapdirtdomain.com

jdn wrote re: DDD: The Ubiquitous Language
on 02-09-2009 8:19 PM

How do you avoid what I would call the 'lowest common denominator' problem?

I don't expect domain experts to understand the difference between 'for' and 'foreach' since it isn't what they do (ignoring edge cases).  But I should be expected to know it.

Similarly, there are concepts that the domain experts are going to have that a developer isn't going to understand.

I actually think this is why so much software developement fails, maybe I should blog it myself.

Anyway, it seems to me that trying to come up with a Ubiquitous Language will almost always be a failure and, paradoxically, a source of confusion.  I think there are only SHARED_LANGUAGES (to use Greg Young's distinction...or was it [SHARED LANGUAGES]?  I forget) at best.

Jak Charlton wrote re: DDD: The Ubiquitous Language
on 02-10-2009 2:29 AM

There can be many Ubiquitous Languages, and many Domains ...  and I think Greg was talking about a Shared Language in respect to BDD and users who are not domain experts.

But if the developer's don't understand a business term, they should either learn it to the degree they need to actually do their job, or find a new job.

Technical skills really aren't enough to be a professional developer - I would prefer an average C# developer who can pickup and apply business terminology, over the greatest C# whizzkid ever known.

One can deliver solutions that match the business requirements, the other will just write code that amuses himself.

It is not the job of the business to learn technical terms to amuse developers - their job is to generate the revenue that developers love to spend.

Reflective Perspective - Chris Alcock » The Morning Brew #283 wrote Reflective Perspective - Chris Alcock » The Morning Brew #283
on 02-10-2009 3:31 AM

Pingback from  Reflective Perspective - Chris Alcock  » The Morning Brew #283

Dew Drop - February 10, 2009 | Alvin Ashcraft's Morning Dew wrote Dew Drop - February 10, 2009 | Alvin Ashcraft's Morning Dew
on 02-10-2009 10:16 AM

Pingback from  Dew Drop - February 10, 2009 | Alvin Ashcraft's Morning Dew

DotNetShoutout wrote DDD: The Ubiquitous Language - Casey Charlton - Insane World
on 02-10-2009 11:55 AM

Thank you for submitting this cool story - Trackback from DotNetShoutout

jdn wrote re: DDD: The Ubiquitous Language
on 02-10-2009 1:04 PM

"they should either learn it to the degree they need to actually do their job"

Which is way, way short of something like an Ubiquitous Language, IMO.

Jak Charlton wrote re: DDD: The Ubiquitous Language
on 02-10-2009 1:11 PM

@jdn

How so?  The UL is a common language that devs and business understand to mean the same things. If "Trade" means something in the UL, it must mean the same to both groups, and if "trade" is a complex term to the business, then the devs are going to have to get a book out and learn about it.

The UL is one of the lowest common denominators, until you all speak the same language, you may as well be throwing money away.

on 02-10-2009 3:11 PM

WCF/CSD/Azure I know I wrote about the "broken WCF and IDisposable" problem before and how we dealt with it at Neudesic but I can't find it/them with Google. Here is a pointer to David Barrett's (Neudesic) post about how we talked about it and

on 02-10-2009 3:14 PM

WCF/CSD/Azure I know I wrote about the "broken WCF and IDisposable" problem before and how we dealt with it at Neudesic but I can't find it/them with Google. Here is a pointer to David Barrett's (Neudesic) post about how we talked about it and

jdn wrote re: DDD: The Ubiquitous Language
on 02-10-2009 3:32 PM

Having worked in an environment like that before, I know first hand that isn't necessarily true.  Sure, there were CFA-types who were both domain experts and developers, but the vast majority of software development can be done through pattern recognition (I've worked in multiple industries and would only consider myself a domain expert in one, at best, but I was able to do a good job, thank you).

That might be a good rule of thumb for when to decide if DDD is right.  If it requires domain experts who are also developers.

Jeremy Gray wrote re: DDD: The Ubiquitous Language
on 02-10-2009 7:54 PM

re: "Users have adopted terms like Paging as their own." and "They probably won’t use a term like Paging in regard to the domain" - I would argue that the people we refer to as our quote-unquote Domain Experts as just our closest _representative_ for our real group of domain experts - the users. If the users are calling something "Paging" (to run with the current example) but it isn't being called "Paging" all the way through the quote-unquote Domain Experts right to the bottom of the code then you definitely have a problem with the ubiquitous language. Its either that or you have a terminology problem you are going to have to take up with your users. :) They are, after all, your real domain experts. Their proxies are just that.

Casey Charlton - Insane World wrote DDD: Bounded Contexts
on 02-11-2009 3:39 AM

It was brought up indirectly in a comment on my last post … the idea of a Ubiquitous Language (UL) seems

Community Blogs wrote DDD: Bounded Contexts
on 02-11-2009 4:28 AM

It was brought up indirectly in a comment on my last post … the idea of a Ubiquitous Language (UL) seems

Casey Charlton - Insane World wrote DDD: There Is No Database
on 02-12-2009 2:27 AM

Do not try to bend the spoon; that's impossible. Instead only try to realize the truth: There is

Community Blogs wrote DDD: There Is No Database
on 02-12-2009 3:11 AM

Do not try to bend the spoon; that's impossible. Instead only try to realize the truth: There is

Casey Charlton - Insane World wrote DDD : Command Query Separation as an Architectural Concept
on 02-12-2009 12:13 PM

There has been some confusion recently around a recent evolution of DDD, the idea of Command Query Separation

Community Blogs wrote DDD : Command Query Separation as an Architectural Concept
on 02-12-2009 12:23 PM

There has been some confusion recently around a recent evolution of DDD, the idea of Command Query Separation

Casey Charlton - Insane World wrote DDD: Entities and Value Objects
on 02-13-2009 10:19 AM

Finally, after 5 posts in the series, we get to the beginning point, the basis of all things… Entities

Community Blogs wrote DDD: Entities and Value Objects
on 02-13-2009 10:56 AM

Finally, after 5 posts in the series, we get to the beginning point, the basis of all things… Entities

Casey Charlton - Insane World wrote DDD: Where is the Code? Another Brief Interlude
on 02-14-2009 12:28 PM

Right about now I can hear murmurs, "I haven't seen any code yet" That is because I view

Community Blogs wrote DDD: Where is the Code? Another Brief Interlude
on 02-14-2009 12:57 PM

Right about now I can hear murmurs, "I haven't seen any code yet" That is because I view

Daniel Teng wrote Weekly links #1
on 02-15-2009 5:01 AM

关于敏捷

FixingtheAgileEngineeringProblemblog.gdinwiddie.com/.../fixing-the-agile-en...

Casey Charlton - Insane World wrote DDD: Aggregates and Aggregate Roots
on 02-16-2009 9:51 AM

Download the eBook of the Series so far … We are family I got all my sisters with me Sister Sledge Some

Community Blogs wrote DDD: Aggregates and Aggregate Roots
on 02-16-2009 10:29 AM

Download the eBook of the Series so far … We are family I got all my sisters with me Sister Sledge Some

Casey Charlton - Insane World wrote DDD: Services
on 02-17-2009 4:38 PM

There can be no word more common in development, and no word used for such a multitude of different things

Community Blogs wrote DDD: Services
on 02-17-2009 4:44 PM

There can be no word more common in development, and no word used for such a multitude of different things

Casey Charlton - Insane World wrote DDD: What Kind of Applications Is It Suited To?
on 02-18-2009 2:20 PM

In many conversations, and in many comments here, you hear phrases like “well that’s not really suited

Community Blogs wrote DDD: What Kind of Applications Is It Suited To?
on 02-18-2009 2:39 PM

In many conversations, and in many comments here, you hear phrases like “well that’s not really suited

Casey Charlton - Insane World wrote DDD: The Repository Pattern
on 02-20-2009 3:30 AM

I seem to have taken a fairly long time to get here, and it has been mentioned in passing, but now we

Community Blogs wrote DDD: The Repository Pattern
on 02-20-2009 4:11 AM

I seem to have taken a fairly long time to get here, and it has been mentioned in passing, but now we

Casey Charlton - Insane World wrote DDD: Living In The Enterprise
on 02-21-2009 4:25 AM

No, not that Enterprise! The other Enterprise – the big amorphous one that organisation spent a fortune

Community Blogs wrote DDD: Living In The Enterprise
on 02-21-2009 4:48 AM

No, not that Enterprise! The other Enterprise – the big amorphous one that organisation spent a fortune

Insane World wrote DDD: Living In The Enterprise
on 02-21-2009 10:42 AM

No, not that Enterprise! The other Enterprise – the big amorphous one that organisation spent a fortune

Insane World wrote DDD: The Repository Pattern
on 02-21-2009 10:42 AM

I seem to have taken a fairly long time to get here, and it has been mentioned in passing, but now we

DDD Step By Step wrote DDD: Bounded Contexts
on 02-22-2009 3:32 PM

It was brought up indirectly in a comment on my last post … the idea of a Ubiquitous Language (UL) seems

DDD Step By Step wrote DDD: There Is No Database
on 02-22-2009 3:32 PM

Do not try to bend the spoon; that's impossible. Instead only try to realize the truth: There is

DDD Step By Step wrote DDD : Command Query Separation as an Architectural Concept
on 02-22-2009 3:33 PM

There has been some confusion recently around a recent evolution of DDD, the idea of Command Query Separation

DDD Step By Step wrote DDD: Entities and Value Objects
on 02-22-2009 3:34 PM

Finally, after 5 posts in the series, we get to the beginning point, the basis of all things… Entities

DDD Step By Step wrote DDD: Aggregates and Aggregate Roots
on 02-22-2009 3:34 PM

Download the eBook of the Series so far … We are family I got all my sisters with me Sister Sledge Some

DDD Step By Step wrote DDD: Services
on 02-22-2009 3:35 PM

There can be no word more common in development, and no word used for such a multitude of different things

DDD Step By Step wrote DDD: What Kind of Applications Is It Suited To?
on 02-22-2009 3:36 PM

In many conversations, and in many comments here, you hear phrases like “well that’s not really suited

DDD Step By Step wrote DDD: The Repository Pattern
on 02-22-2009 3:36 PM

I seem to have taken a fairly long time to get here, and it has been mentioned in passing, but now we

DDD Step By Step wrote DDD: Living In The Enterprise
on 02-22-2009 3:37 PM

No, not that Enterprise! The other Enterprise – the big amorphous one that organisation spent a fortune

Insane World wrote DDD: Living In The Enterprise
on 02-26-2009 4:08 PM

No, not that Enterprise! The other Enterprise – the big amorphous one that organisation spent a fortune

Insane World wrote DDD: The Repository Pattern
on 02-26-2009 4:08 PM

I seem to have taken a fairly long time to get here, and it has been mentioned in passing, but now we

My blogging guidelines…for now… | PureCognition wrote My blogging guidelines…for now… | PureCognition
on 03-04-2009 12:46 PM

Pingback from  My blogging guidelines…for now… | PureCognition

About The CodeBetter.Com Blog Network
CodeBetter.Com FAQ

Our Mission

Advertisers should contact Brendan

Subscribe
Google Reader or Homepage

del.icio.us CodeBetter.com Latest Items
Add to My Yahoo!
Subscribe with Bloglines
Subscribe in NewsGator Online
Subscribe with myFeedster
Add to My AOL
Furl CodeBetter.com Latest Items
Subscribe in Rojo

Member Projects
DimeCasts.Net - Derik Whittaker

Friends of Devlicio.us
Red-Gate Tools For SQL and .NET

NDepend

SlickEdit
 
SmartInspect .NET Logging
NGEDIT: ViEmu and Codekana
LiteAccounting.Com
DevExpress
Fixx
NHibernate Profiler
Unfuddle
Balsamiq Mockups
Scrumy
JetBrains - ReSharper
Umbraco
NServiceBus
RavenDb
Web Sequence Diagrams
Ducksboard<-- NEW Friend!

 



Site Copyright © 2007 CodeBetter.Com
Content Copyright Individual Bloggers

 

Community Server (Commercial Edition)