Modeling Out Loud
The detachment of speech from other forms of communication is a particularly great loss because
we humans have a genius for spoken language. Unfortunately, when people speak, they usually
don't use the language of the domain model.
That statement may not ring true for you initially, and indeed there are exceptions. But the next time
you attend a requirements or design discussion, really listen. You'll hear descriptions of features in
business jargon or layman's versions of the jargon. You'll hear talk about technical artifacts and
concrete functionality. Sure, you'll hear terms from the domain model; obvious nouns in the common
language from the business jargon will typically be coded as objects, and so those terms will tend
to be mentioned. But do you hear phrases that could even remotely be described in terms of rela-
tionships and interactions in your current domain model?
One of the best ways to refine a model is to explore with speech, trying out loud various constructs
from possible model variations. Rough edges are easy to hear.
“If we give the Routing Service an origin, destination, and arrival time, it can look up the stops
the cargo will have to make and, well . . . stick them in the database.” (
vague and technical
)
“The origin, destination, and so on . . . it all feeds into the Routing Service, and we get back an
Itinerary that has everything we need in it.” (
more complete, but verbose
)
“A Routing Service finds an Itinerary that satisfies a Route Specification.” (
concise
)
It is vital that we play around with words and phrases, harnessing our linguistic abilities to the mod-
eling effort, just as it is vital to engage our visual/spatial reasoning by sketching diagrams. Just as
we employ our analytical abilities with methodical analysis and design, and that mysterious “feel” of
the code. These ways of thinking complement each other, and it takes all of them to find useful
models and designs. Of all of these, experimenting with language is most often overlooked. (Part
III of this book will delve into this discovery process and show this interplay in several dialogs.)
In fact, our brains seem to be somewhat specialized for dealing with complexity in spoken language
(one good treatment for laymen, like myself, is
The Language Instinct
, by Steven Pinker [Pinker
1994]). For example, when people of different language backgrounds come together for commerce,
if they don't have a common language they invent one, called a
pidgin
. The pidgin is not as com-
prehensive as the speakers' original languages, but it is suited to the task at hand. When people
are talking, they naturally discover differences in interpretation and the meaning of their words, and
they naturally resolve those differences. They find rough spots in the language and smooth them out.
Once I took an intensive Spanish class in college. The rule in the classroom was that not a word of
English could be spoken. At first, it was frustrating. It felt very unnatural, and required a lot of self-
discipline. But eventually my classmates and I broke through to a level of fluency that we could never
have reached through exercises on paper.
As we use the
UBIQUITOUS LANGUAGE
of the domain model in discussions—especially discus-
sions in which developers and domain experts hash out scenarios and requirements—we become
more fluent in the language and teach each other its nuances. We naturally come to share the
language that we speak in a way that never happens with diagrams and documents.
Bringing about a
UBIQUITOUS LANGUAGE
on a software project is easier said than done, and we
have to fully employ our natural talents to pull it off. Just as humans' visual and spatial capabilities
let us convey and process information rapidly in graphical overviews, we can exploit our innate talent
for grammatical, meaningful language to drive model development.
Therefore, as an addendum to the
UBIQUITOUS LANGUAGE
pattern:
Play with the model as you talk about the system. Describe scenarios out loud using the elements
and interactions of the model, combining concepts in ways allowed by the model. Find easier ways
to say what you need to say, and then take those new ideas back down to the diagrams and code.
Communication and the Use of Language 19