Chapter 5 Creating a Domain Model

So you had some great introductory conversations with your subject-­matter experts and target audiences. You listened. You asked probing questions. You’ve taken your first step into the larger world of your subject domain. Fascinating, isn’t it? Taking apart a topic and seeing how it all works is one of the most exciting parts of the design process. Defining a list of terms is the first step to gaining understanding. The next step is ­figuring out how those terms relate. We need a way to explore and communicate how the whole subject hangs together.

How Do We Make the Connections?

Enter the domain model—a conceptual model of the subject domain. It shows the concepts found in that domain and the specific relationships between them. Hang out with software engineers and you might see them use entity-­relationship diagrams (ERDs) to design complex systems such as database architectures. The diagram names each part of the system, defines the properties that make up each part, and shows the connections between all the parts.

In his book Domain-Driven Design: Tackling Complexity at the Heart of ­Software, Eric Evans co-opts the ERD to model a subject. He uses the example of air-traffic control systems, mapping out the complexities of flights, routes, and flight plans. In Eric’s book, domain modeling supports a software development process. Teams split the software project into parts, conforming to subsections of the domain.

If you’re not a software engineer, you may have tuned out already. But it’s okay—the domain model itself isn’t technical or scary at all. It’s just a way of drawing on paper the things you already know. We’ve used domain modeling to help us make sure our content addresses user needs. It helps us chop up that content into the most useful and interesting parts. And it helps us structure and present content to different audiences on different devices.

Done right, the domain model is one of the most pivotal artifacts of any content project, informing everyone’s work. Every design, every piece of content, and all code can be traced back to the model. Getting alignment on the model helps your team get passionate about the subject. Support that subject with content and software, and you help your audience understand and explore what they care about.

As you’ll see, the model is structural, so it’s easy to mistake it for a fancy version of a site map. But this isn’t in itself a blueprint for how the parts of your digital product are arranged. In fact, free your mind from thoughts of digital products altogether. The domain model maps your subject, not your website.

Connecting Concepts

Modeling starts by connecting two or more concepts. Within a domain model, each concept is called a domain object. From your research, you’ll already have a good idea of what the major domain objects will be.

In Chapter 4, we explored the subject domain of the IA Summit conference. (Don’t worry if conferences aren’t your bag; there are more examples coming up.) One of the main objects was Person (Figure 5.1). A person is an ­honest-to-goodness rational human being. (Well, sometimes conference planning makes irrational beings of all of us, but that’s another story.) The domain objects build a picture of the subject. So each object represents a real-world concept.

Figure 5.1 A domain object.

Why Person and not something like Speaker? Many people involved in the conference aren’t speakers. They might be the conference co-chair or the host of a social event. Even the folks who run hands-on workshops aren’t strictly “speakers.” For now, Person it is. Object names are singular (so Person, not People) because the model shows how one example of each object relates to one example of another object.

Another object is Session, which covers things like 45-minute lectures, workshops, 5-minute lightning talks, and even social sessions, such as the karaoke night. Each session is associated with at least one person (Figure 5.2), who is usually the speaker or host of that session.

Figure 5.2 Adding another object.

Why go with Session for everything rather than using a bunch of different objects, like Social, Lecture, and Workshop? We want the model to be reusable and flexible and document only the things that remain true over time. The IA Summit experiments with different types of sessions each year. Who knew a 6 a.m. fun run would catch on?

Regardless of the type of session, the relationship to Person remains the same. Session is flexible enough to work for any type of session we plan. So let’s add another object to express that each session has a type: Session Format (Figure 5.3).

Figure 5.3 Another object.

Again, we’re being flexible. Session Format is broad enough to cover everything from the academic round table to the social board-game evening. And on and on we go, adding more related objects until a comprehensive model emerges.

Objects vs. Instances

Remember, you want this model to be reusable, so be careful to distinguish between domain objects and instances of those objects. An instance is a specific example of the concept represented by the domain object. Let’s say you are doing something about movies and have a domain object of Character. Forrest Gump would be an example—or instance—of that object. You can’t put Forrest directly into the model as an object, because he’s not reusable. If you later want to add Lieutenant Dan, you’d need a whole other object. So domain objects are general forms designed to cope with many instance examples, many of which aren’t known in advance. You might say they’re like a box of chocolates.

Sometimes it’s easy to mistake an instance for an object. In one of the first drafts of the IA Summit conference model, we used the object Hotel. This represented the place where the conference was held, usually one of the more soul-sucking U.S. chain hotels. Oh, except that one time when it was in a convention center. Or that time they had to split up sessions at different lecture theaters all over town. Damn—Hotel doesn’t cut it as a domain object after all. What you want is Venue. Far more flexible. You can even reuse that same object to describe the individual rooms for each session.

Note that the model does include a Hotel object, but that refers to the official accommodation for attendees. We think that will always be a hotel, but who knows? Maybe that hipster cabin-in-the-woods maker-hacker/bike-repair event could fly.

It takes a little forward thinking to figure out what’s likely to change over time. But by designing for change up front, you’ll make a more scalable product.

Forming Meaningful Relationships

Domain models use the relationships between concepts to build understanding. Those boxes in the diagrams are super important. More important still are the lines that connect them. When you connected that Person object to the Session object, you understood why you did it. But to anyone else reading the model, it’s just a line. Maybe you should give it a name.

Relationships have values. A moon – orbits – a planet. The author – wrote – the novel. The cat – sits on – the mat. These describe the nature of the relationship. If domain objects are nouns, then relationship values are the verbs that connect them. Or to return to vague memories of English class:

Subject – Predicate – Object

For the Person-Session relationship, you need to define what a Person does to a Session (or, if you prefer, what a Session has in store for a Person). For now, let’s keep it simple and assume you’re dealing only with the session host. Host seems like a good term that works for the person who runs lectures, workshops, or social sessions (Figure 5.4). So let’s say:

Figure 5.4 Building a relationship between objects.

Just like that, the relationship has a value. It tells everyone exactly why that poor Person is forever shackled to the Session. Oh, and that weird style for hostedBy is deliberate. It’s called camel case, and it’s a common convention to maintain a one-word name. That helps the terms you define be carried through to database design.

Which way around should you make your relationship? Should you assert that a hotel has a restaurant? Or is it better to say that the restaurant is located in the hotel? Actually, it doesn’t matter too much in the model, but try to be consistent. We prefer to standardize on the idea that a larger concept contains a smaller one. The hotel has a restaurant, but the restaurant doesn’t have a hotel.

When you publish your content, you can use relationship values to link resources together. Remember the bad old days of web design? Those right-hand columns filled with “related links”? Related how, exactly? The links never told us. But by explicitly defining the relationship in the model, your links can convey more meaning. A page about a hotel can show its restaurants. A page about a particular restaurant can show which hotel it’s located in. A page profiling a person could connect automatically to every session the person has ever hosted. Should any person later change their name, or a session switch to a different host, then that information would be updated everywhere.

Expressing relationships in the domain model completes the picture of how one concept connects to another. Soon these relationships will inform the design of your content management system (CMS). Eventually they will guide your interface navigation. Most importantly, they show the team, and the audience, how your world joins up.

Breaking Down a Model

Figure 5.5 is the complete domain model we created for the IA Summit conference. It’s made up of domain objects and relationship values. Let’s go through it piece by piece.

Figure 5.5 IA Summit conference domain model.

The Event refers to the specific conference event. We first worked on the 2015 IA Summit, in Minneapolis, but we could reuse this model for every future summit (or every previous event, dating back to 2000).

Each event belongs to the master conference Brand—in our case, the IA ­Summit. There are a few concepts associated with the brand as a whole (such as its mission, vision, and values). It’s useful to distinguish the brand from individual events.

We hold the event in a specific Venue. That venue has a real-world Location, which is useful to include to give people a sense of physical spaces relative to each other.

A Person is associated with an event. But not all associations are the same. There are session hosts, keynote speakers, volunteers, chairpeople, committee members, and more. We called each of these a Role. To capture this in the model, we decided that a Role is associated with an Event and that each Role is filled by a Person.

Over time, the same person may be associated with many events and roles. Maybe this year they’re a volunteer. Next year they could host a session. Perhaps one day, they are a keynote speaker. Their role relative to each event would change, but they’re still the same person. Even within a single event, they may wear many hats. Identifying them as the same person means we can get the content management system to connect related sessions and roles. And now we have a useful way to showcase each person’s illustrious speaking career.

Note So it turns out we were wrong before to associate Person directly with ­Session! It’s more correct to assert that a Person holds the Role of Host and that it’s actually the Role that is associated with the Session. But that’s okay—revisions like this happen all the time in modeling, as you think about specific use cases and adapt your model accordingly.

Each Session is associated with an Event. A Session has a Session Format (for example, lecture, workshop, and social) and an associated Venue (such as a ballroom, lecture theater, or yurt). Note that here we’re reusing the Venue domain object that we associated with the event itself. Does this mean they have to hold the same value? Nope! The fact that a Venue object is associated with both the Session object and the Event object takes care of both use cases. Whether it houses a single talk or an entire conference, the Venue object is defined in the same way.

A Session may cover a specific Topic, which we’ll use to help curate the speaking program. Our event is multi-track, meaning that several sessions run concurrently and attendees choose their poison. Each session belongs to exactly one Track.

The event can have a Sponsor. More than one, we hope. Someone’s got to pay for those happy hours. An individual session may also be sponsored, especially that happy hour, brought to you through the kind generosity of Pearson Education. (See how good that sounds? Can we have our money now?)

And that’s it! Although simple, it’s powerful enough to guide the planning and structure of content across an entire series of conference events. It captures connections between people and ideas, within an event and across the years.

Maybe your model for this domain would look different, and that’s fine. We had some great debates over ours. Should a Session and an Event be different things? Maybe we could have reused the Event object to have events within events. Were Session Format and Topic useful enough to define as fully fledged domain objects? Each successive pass over the model brings opportunities to refine and simplify.

There’s no right answer. Your model is your best take on capturing the subject domain. Like any model, it’s an abstraction from the specifics of reality. Those specifics can be expressed in more than one way. As the grunt said of Camelot in Monty Python and the Holy Grail, it’s only a model.

Modeling Is Teamwork

Everyone on your team should develop the model together. Designer, engineer, content strategist, researcher, product manager—everyone. You’re building a common vision of your subject domain. To set up your project for success, you must, must, must align on that vision. If the team can agree on nothing else later on, at least agree on this.

Getting buy-in from a team requires their participation. When a teammate has to later interpret what’s documented, they can go off script, especially in areas where they don’t agree. A lack of alignment starts tremors that reverberate throughout the product design. Conceptual issues magnify when codified into database tables, content strategies, and information architecture. It’s better to get it right now, while it’s still just boxes and arrows on paper.

Discuss your research. Develop a model that best serves the subject, the audiences, the stakeholders, and you as a team. Conversations uncover complexity. Solutions are better when you question assumptions and fold new perspectives into the mix.

Using the Sticky Note Method

Get a room. A big room, with a large table. Enough to take a team of four to six people. Enough to spread out and make a mess. Grab your designers, engineers, writers, stakeholders, experts, users. Take cupcakes and Haribo. You’re going to need some teamwork.

You will need

  • A few large sheets of paper (flip chart paper is great)

  • A stack of sticky notes

  • Sharpies or other pens

  • The domain knowledge gleaned from your research

  • A willingness to discuss and debate the domain

On each sticky note write the name of a domain object. That in itself should get the conversation started. Once you agree on a valid object and align on a name, stick it on the big sheet of paper. Don’t worry—this decision isn’t final. You’re going to move a lot of things around before you’re finished.

Repeat for every domain object. Don’t worry where you stick them on the paper right now. You’ll be doing a lot of repositioning as you figure out how things fit together.

As you place each object, discuss what it is and how it relates to other objects. Do you have the right object name? If not, toss the note and write a new one. Sticky notes are cheap.

Once you have your objects down, move them around to place related objects together. It doesn’t have to be perfect. Most first-draft domain models are messy. Move things around and talk about them. You might find you need an extra object or realize an existing object is unnecessary. The sticky notes and wastepaper basket are your friends.

Got a bunch of objects down on paper? Great! Now for the part that seems to scare people. Honestly, we’ve done this exercise in workshops and seen folks put off this step for as long as they can. Take a pen, and draw a line on the paper to connect two of the domain objects. Then write on the line a label to describe the relationship. Remember that sometimes those relationships aren’t thrilling (RecipehasIngredientIngredient), but label them anyway.

Keep going, connecting all your domain objects. After the commitment-free ease of sticky notes, drawing black lines with a Sharpie feels horribly permanent. It’s okay—this is still your rough, throwaway draft. It’s meant to be messy. Mistakes can even be helpful, signaling some bit of domain complexity to tease out.

Once you’re done, test-drive the model with different instance examples. Make sure everything holds up. Where you need a little tuning, make some quick fixes with the sticky notes.

Keeping everything on paper helps the exercise feel interactive. Sometimes we just think better about this stuff when we’re using our hands and moving around. Keeping it rough stops things from feeling too technical or intimidating (Figure 5.6). It gives everyone permission to make mistakes. Above all, this process is a way of helping the team come together and explore the domain. The conversations that come from modeling are as least as important as the model itself. It’s the activity, not the artifact, that matters most.

Figure 5.6 Keeping modeling messy with sticky notes and Sharpies.

Agreeing on Your Domain

We often run workshops to help people get the hang of domain modeling. ­Usually we ask teams to pick their own subject. Once a team chose to model the TV show Twin Peaks. They started well, defining objects like Character and Episode. Then things started getting complicated. Should they model “inside” the universe (characters, interactions, motivations, places, and plot events) or “outside” the universe (episodes, broadcasts, movies, and DVD releases)? It quickly became as convoluted as the show itself.

Sometimes your team’s mental models need alignment. Understand and agree about up front exactly what you’re trying to capture. Modeling Health Care would take you in a different direction than modeling Medicine. Without team alignment on the domain, you’ll find it hard to express the domain as a model. If you’re having a lot of disagreements while modeling, wind things back. Make sure you all have the same domain in mind.

Discuss the subject domain your business operates in. If you sell concert tickets, serve your audience by modeling Live Music. If you work on a savings app, maybe it’s Personal Finance. Set that expectation early on. There’s a huge difference between modeling Live Music and attempting Music as a whole. Remember that your audience’s interest doesn’t begin and end with your business proposition. They’re interacting with your business because of their interest in a broader topic. Just what is that topic? And how can you better serve them by supporting it?

Remember that your audience’s interest doesn’t begin and end with your business proposition. They’re interacting with your business because of their interest in a broader topic.

Consider what’s actually useful to your audience. If we modeled Road Tripping, we’d stick to Routes, Cities, Vehicles, and Points of Interest, and not so much the Interstate Highway Act, road composition, or gas
consumption. But your mileage may vary.

Modeling resists constraint because all knowledge is fundamentally connected. In our Road Tripping example, it would be easy and reasonable to throw in the ­Vehicle object. That might have a Vehicle Type. Pretty soon you’re down a rabbit hole, throwing in objects like Manufacturer, Engine, and Model Variant. This has drifted into the domain of Automobiles and lost sight of what’s most compelling to the audience and business.

Making Good Domain Objects

Our chosen subject contains abstract concepts we captured as domain objects. But knowing what makes a good object can be tough. So here’s a spoiler for the next chapter: Domain objects contain attributes. They are the atoms in the molecule, the protons in the atom, or something. (Don’t ask us to model Chemistry.)

For example, Person is a great object for our IA Summit domain. But we want our person to have a name, a headshot photo, a biography, and maybe even a link to their blog. Are these things also domain objects? Not necessarily. Most likely they’re just descriptive attributes of that domain object. These attributes don’t have to appear in your domain model. You’ll express them later in the detailed content model, which is explained in Chapter 6.

Figuring out what’s a domain object and what’s just an attribute can get tricky. There’s no “correct” answer here. It depends on how you choose to represent your domain.

When you get stuck, ask yourself some questions:

Does this concept contain other useful and reusable concepts?

If so, it’s probably a domain object. We describe our Session object using attributes such as Name, Description, Location, Host, Time, Date, and Time. We’ll want to reuse this general form for every instance of a Session. Attributes can hold specific values (something like 3:30 p.m. or Where Next for Empathy?). You’ll notice that some of the so-called attributes (like Host) are themselves domain objects. That’s fine; a complete domain object (or “entity”) can be an attribute of another object even if it has attributes of its own.

Can this concept be answered with a specific value?

If it can, then you’re probably dealing with an attribute of a larger domain object. Attributes are things like Phone Number, URL, Description, Photo, Ingredient, and Top Speed. If you find yourself looking to include concepts like this, work backward. Figure out what they’re attributes of. You may end up discovering a larger domain object.

Does this concept have specific relationships to existing domain objects?

If it does, it may be best to represent it as a domain object. Think about ­Session and Session Type. Remember that an example of a Session might be Board Game Evening with a session type of Social. So why have ­Session Type as a full domain object and not just an attribute of Session? On our project, we knew that different session types can behave a little differently. A sponsor might give us money to spend on all the social events. Workshops may have specific coordinators and specific price and availability attributes. So while Session Type is answered by a specific value, it was helpful to relate some things to types of session rather than to sessions themselves.

Is this concept expressed as an object in other domains?

One of the cool things about domain modeling is the ability to reuse objects in other models. If you modeled the subject Information Architecture, you can bet you’d reuse objects from the IA Summit conference domain. The Person and Topic objects connect the wider practice of IA with the things or people who shaped it. Should you find yourself modeling several domains, think about the objects you can share across them.

Does this concept need a specific representation in the interface?

In other words, if this were a website, would this thing need its own page? If so, then it’s a domain object. You almost certainly want a specific representation for each Person and Session. That way, every session or speaker profile can be linked to, shared, or searched for. When you’re likely to give something its own URL, make it a domain object.

Am I likely to want to expand on this concept in the future?

If so, you probably want to make it a domain object now. Today your tastes might be simple. Maybe you’re modeling the domain Restaurants. You’re thinking, “Hmm...I know I want Menu to be a domain object. Menus have items, so I’ll define Menu Item as an attribute.” Great start, and that might suit your needs just fine for today. But in the future, you may find that those unsung little menu items are the meat and potatoes of your restaurant business. They’re your signature dishes—the stuff that people are perhaps most interested in. In that case, you’ll want to whip up that Menu Item attribute into a full domain object: Dish, perhaps, with related attributes like ­Ingredient, Cuisine, or Diet. As always, think hard about what’s most interesting. The menu is only the playlist. It’s the stuff on the list that we care about.

Domain objects represent rich concepts that break down into attributes. Don’t include attributes in the domain model. If they come up in group discussion, by all means capture those decisions for later. You’ll be using them soon. But leaving them out of this model makes the diagram easier to read and less subject to change. It also helps keep your thinking at a high level. But hey, if some attributes end up expressed as full objects, it’s not a problem. It may even signal some future requirements you’ve yet to explore.

Finding a Ubiquitous Language

As a team you’re going to spend a long time referring to the same things. Meetings. Design and code reviews. Usability testing sessions. Over and over you’ll talk about the same domain objects. You need a common vocabulary—what domain-driven designers call a ubiquitous language.

This is nothing more than agreement on how everything’s named and defined, though agreement on language isn’t always straightforward. Teams can lose sight of their audience and skew toward technical or domain-specific jargon. Terms should make sense to everyone on the team, but also to the domain experts and users. The names of domain objects and relationship values should come from your research.

If you’re struggling to give something a clear name, it could be that your concept isn’t well-defined. Once, when working on a model for a music service, we debated whether to name a concept “account” or “profile.” It turns out we’d mangled a couple of concepts and our one domain object needed to be two.

Use consistent terms across database table names, CSS classes, and style guides. Your terms should be clear and self-explanatory enough to use even as navigation labels in your interface. Insist in meetings that everyone stick to the correct terms. It’s not unusual for engineers to fall back to technical jargon that feels more familiar. But listen for terms that just refuse to stick. It might be that the term chosen doesn’t reflect the concept it’s meant to describe. In that case, revisit the model and make sure your original understanding still holds. It’s fine to make changes—just make sure your model and your terms are in sync. A ubiquitous language helps keep your project team on the same page. If it isn’t spoken, it isn’t alive. Your goal is consistency through code, content, and user interface design. Make your ubiquitous language part of your everyday project conversation.

Establishing Cardinality

So far you’ve used a simple connecting line to show a relationship between two domain objects. Nothing simpler than good ol’ boxes and arrows. But what if those relationships come with strings attached? Sooner or later you’ll need to express some ground rules about how things connect.

Cardinality is counting how many of something can relate to something else. A car has only one engine. A person has at least one name but could have more. A dish has many ingredients. A musician may be part of zero, one, or many bands. That’s cardinality at work. You express it using crow’s foot notation (though other fine notation formats are available). Let’s look at the three main types of relationships.

One-to-One (1:1)

In a 1:1 relationship, one instance of one object relates to only one instance of another object. A specific key opens only a specific lock (Figure 5.7). And that specific lock can be opened only by a specific key. A specific Social Security number is assigned to a specific person. That person is assigned only that number. In practice, true one-to-one relationships are rare. If you encounter one, ask yourself whether both concepts are true domain objects. It may be that one is merely an attribute of the other.

Figure 5.7 A 1:1 relationship.

One-to-Many (1:n)

In a 1:n relationship, an instance of an object can relate to several instances of another object. A sports team has many players, but they all belong to only that team (Figure 5.8). A session has one venue, but that venue probably hosts several sessions. Charles Dickens wrote a bunch of great books, but each book was written only by Charles Dickens. Great Expectations was published in many different editions, but they’re all editions of the same book. Charles ­Dickens kept many chickens, but each chicken had only one owner. One-to-many relationships are the most common type you’ll encounter.

Figure 5.8 A 1:n relationship.

Many-to-Many (m:n)

Is it getting crowded in here? In an m:n relationship, several instances of an object relate to several instances of another. At first glance, this might seem to happen all the time. Take that Book and Author example from before—some books (like this one) have more than one author. So it looks correct to say that several authors can write several books (Figure 5.9). But that becomes complicated. Your average relational database would have a meltdown. In fact, true many-to-many relationships are rare. If you find yourself faced with one, it’s a reasonable bet that you’re missing a domain object. This bit is important, so let’s elaborate.

Figure 5.9 An m:n relationship.

On first inspection, it seems possible that Author to Book should be an
m:n relationship (Figure 5.10).

An author can write one or more books.

A book can have one or more authors.

Figure 5.10 An m:n relationship.

For the model to inform the database design, you must resolve the m:n relationship into two 1:n relationships. You can do this by moving a few things around and creating a whole new domain object.

First, instead of Author as an object, try Person. After all, authorship alone doesn’t define a person. And maybe you’ll want to reuse a Person object from another domain.

Now create that new object. Call this the Collaboration. This object acts as a junction between Person and Book and defines the lineup of people (Strunk and White, Carrie and Mike, James Patterson and whoever . . .) who wrote a specific book. Now you can say:

One person can be part of one or more collaborations.

One collaboration can write one or more books.

And voila! The m:n becomes two 1:n relationships (Figure 5.11). Who knows, that Collaboration object could be valuable in itself. It’s like the difference between shouting out a bunch of songs and defining a playlist.

Figure 5.11 Two 1:n relationships.

The catch here is that now a person has to be associated with a book via the collaboration, even when they’re only collaborating with themselves. For that reason, maybe Collaboration isn’t the best name, but we couldn’t think of a better one. Can you?

Optional Relationships

Charles Dickens may have many pet chickens, but ironically, poor old Roald Dahl has no chickens at all. So a person may have zero, one, or more than one pet. In crow’s foot, you can make a 1:1 or 1:n relationship optional by adding a circle to represent the zero (Figure 5.12).

Figure 5.12 Optional relationships.

Recursion

A recursive relationship connects a domain object to itself. Let’s take a ­classic workplace example. One or more employees are managed by a manager. ­Simple enough, right?

But hold on, isn’t that manager also managed by someone? And that someone is in turn managed by someone else? And really, is a manager a different class of person than an employee? (Hey, c’mon now. Be nice.) We could tidy this up by saying that an Employee manages zero, one, or many employees (Figure 5.13). It’s a recursion all the way up to the head honcho on the 40th floor. And even she’s an employee.

Figure 5.13 A recursive relationship.

Don’t take offense when you hear people refer to this notation as a “pig’s ear.” They’re not critiquing your work.

Adding cardinality to a domain model is a pro move. It’s fine detail and not something you’d always include in the first draft, but it provides the important business logic you’ll soon need to move from paper to data.

Knowing When to Stop

You know that time when you meant to tidy a few loose papers and before you know it you’ve cleaned the whole house? Yeah, us neither—but modeling can be like that. Knowledge is sprawling and unordered. It can be hard to focus on one piece without following the rabbit hole to anything and everything else.

Chunk Your Model

One tactic is to assign ownership of parts of the model to different people on the team. It’s a little like working on a jigsaw puzzle as a group, as each person builds out a subsection. This helps them focus on one part of the problem. Regroup often as a team to compare your pieces and make sure they fit together. Working this way builds peer review into the process and exposes differences in understanding. It’s easier to update small parts of the model independently than to update the entire thing at once. Indeed, some parts may need more iteration than others. Just make sure you keep checking in as a team and sharing your progress.

Find the Boundary Objects

Often, you’ll define an object that could also belong to different subject domains. Take Song from the earlier example of Live Music. That object could be equally at home in the domain Recorded Music. (Though is a live version of a song truly the same thing as the recorded version? Maybe you’d need to throw a Version or Performance object in there.) These are boundary objects, because they mark the gateway to adjacent domains. When you come across one, be careful to stay focused on your original domain. It’s easy to wander off-course and start modeling out the entire universe.

Maintain distinct domain models for the different subjects you want to cover. That’s so much easier to manage than a one-model-to-rule-them-all approach. Boundary objects are your magic portals from one subject to the next. The BBC once modeled out all the TV shows they broadcast, episode by episode—right down to the songs featured in the track list. A show such as Mad Men is full of cool 1960s music. The BBC’s page for each episode listed every song heard, along with the original recording artist. In the underlying model, Song and Artist were boundary objects also used by the BBC Music service (with its own domain model). That made some magic possible. Bob Dylan’s entry in the Mad Men tracklist linked automatically to the Bob Dylan page on BBC Music. By connecting TV to Music through boundary objects, they opened up new user journeys. People could look up a song they heard on TV and follow a tight connection to the heart of the artist and their music.

Bringing In Experts

During your initial research, you made some new friends of the experts and enthusiasts. In an ideal world, you’d make them part of the modeling crew. They’d sit in on all your meetings and help you thrash it all out. In practice, this is rarely practical. So here’s a couple of ways to make sure your modeling has an expert’s seal of approval.

Bring Experts In Early

Domain modeling doesn’t have to come after meeting with subject-matter experts and users. As mentioned in the last chapter, it’s just as good (maybe even better) to start sketching the model while you have them. This can clarify the points they bring up in conversation; such is the power of visual thinking.

Collaboration works best while the model still looks rough. Sketches and sticky notes beat a slick diagram that’s printed out or, worse, displayed on a computer screen. You have a bunch of boxes and arrows that may not have the right labels, may not be complete, and may need connecting. Make everything easy to erase or reposition. Modeling is messy. People engage more when they can get hands-on.

However you choose to involve them, schedule regular check-ins with your experts, users, and stakeholders. Anyone should be able to follow the model and so understand your take on the subject. It’s a great conversation piece.

We’ve always found that when we get deep into modeling we start to see our subject as a series of interlocking parts. But don’t assume that even an expert thinks in the same way. Their mental model is probably rooted in practical examples, not abstract concepts and relationships. Be ready to help them to think at a higher altitude.

Bring the Experts Back

As you model, questions will come up, usually around the difference between two domain objects or the possible connections between them. Should you connect the Chef object to the Dish object? Or is it the Recipe object? Maybe both? This is the time to go back to the experts.

If your SMEs are also your project stakeholders, then it’s double brownie points. You’re bringing them into the design process, where their expertise is the most influential. It sure beats asking them to judge an art show of wireframes.

Ask your SMEs things such as:

Does this make sense?

This seems an obvious question to start with. We say that anyone should be able to read the model. Still, walk them through your thinking anyway. This time they’ll be asking the questions, so listen for any points of confusion. You may yet need to get out the sticky notes and white-out while your experts are still in the room. Note any political differences of opinion, but try to keep these separate from an objective appraisal of your model’s validity.

Are we using the right terms?

Research informs the names you choose for your domain objects. You’ve taken input from experts, from users, and from your own team and stakeholders. What you name your domain objects is then your call. You might have good reasons for deviating from an “official” term. (Often some expert terminology is too highfalutin for the folks back home.) Make your case to the experts. Get their blessing that even when your terms are different, they’re not wrong.

Is this always true?

Remember that omnishambles when we called something Hotel when we really meant Venue? Man, dark days. Something we assumed to always be true turned out to have notable exceptions.

Since your model guides your design decisions, you want it to have a decent shelf life. Run through actual examples using specific instances of each domain object. Look for examples that suggest changes to either your domain objects or your relationships.

What’s missing?

A model is an abstraction of reality. It’s always going to be a little reductive. Sometimes a lot. Prioritize the most significant concepts—things without which the subject can’t be fully understood. Simplification is a high-wire act, especially when you’re not a subject-matter expert. Walk them through examples to confirm that the decisions you’ve made haven’t broken the model. Then again, your expert may fixate on some arcane point of process that matters to no one but them. Try to get more than one expert opinion.

Missing objects may also signal disagreement about the domain you’re attempting to model. What people call a “subject” is just an arbitrary lasso thrown around a subset of knowledge. People don’t always agree on the boundaries.

Who Uses the Model?

Together your team filled journals with interview notes. Your wastepaper basket brimmed with collective attempts to understand and sketch out relationships. You spent hours over pizza, debating what to call the things within your domain. How to define them. How they fit together. The team has soaked up enough domain knowledge that you could chat to a stranger in a bar and pass for experts yourselves. And to crown all that study, you arrived at a domain model so elegant and so simple (yet powerful) that any one of you could draw it on a whiteboard and discuss the finer details of your specialist subject. Go team!

Soon you’ll all start to show your superpowers. Content design. Interface design. Database and CMS design. These steps should be collaborative too. But even when you can’t work together, you’ll always have the domain model. It’s now your common reference point to guide each discipline.

Who will use this marvel and how?

Interface Design and Engineering

You’re going to design and build the interfaces that connect people to content. These windows into the world represent the content resources first described as domain objects. Through interface design and navigation, you’ll show how these resources fit together. Flip to Chapter 9, where we go deep on this.

Back-End Engineering

If you’re a back-end engineer, we bet you’ll see a domain model and start thinking of database tables. You’re no stranger to entity relationship modeling. This looks pretty much like the process you’d go through anyway. You’ve been able to help your team see the world as objects and relationships. Most content management systems (whether off the shelf or home-grown) run from a relational database. Design this database to map to the research-validated model. More of that coming in Chapter 8.

Content Strategy

For you folks working on the content itself, the domain model is a treasure map! It’s a record of the kinds of content your general and expert audiences have told you they’re interested in. You’ll use it as reference to audit the content you have and make a plan for the content you need. Intrigued? Chapter 7 is your jam.

More Examples

Yeah, we know. Our IA Summit domain example may be helpful, but it’s not the whole meatball. People ask us all the time for more examples to help cement the idea. Try these on for size:

Theme Parks

Mike is crazy-obsessed with Disney theme parks. Modeling it made him think hard about what a theme park even is (Figure 5.14).

Figure 5.14 A theme park model.

Note Disney sometimes calls their hotels “resorts,” just to mess with us.

Walt Disney World is a Resort, with a Location of Orlando, Florida.

Each resort has Parks, such as the Magic Kingdom or Epcot.

Each Park divides into Lands (Adventureland, Fantasyland). Each Land has Attractions (like Mike’s favorite, the Haunted Mansion). There are also Hotels. These sometimes have a direct relationship to a Park (such as Animal Kingdom Lodge) and sometimes don’t (Disney Pop Century).

Note Epcot’s weenie is also an attraction, Spaceship Earth.

Ooh, and each park also has a Weenie—Disney’s term for a big piece of architecture used to help in wayfinding. In the Magic Kingdom, it’s the castle. In Epcot, it’s the big geodesic ball.

Each attraction has one lead designer (an Imagineer like Marty Sklar or Mary Blair). In practice, it would be difficult to credit everyone who worked on an attraction, so “lead” designer is sufficient. Also this avoids having to resolve the many-to-many relationship between designers and attractions. Attractions could be based on some prior creative work (as with Jules Verne’s 20,000 Leagues Under the Sea).

Each park has a Restaurant or six, as do the hotels. Each restaurant has Meal Events (Cinderella’s Royal Table, anyone?), and those meals are usually associated with a specific Character. That character (we’re looking at you, Pooh) may themselves be based on a prior creative work.

It’s not a complex model (it’s a small world after all) but one that tries to capture what’s useful and interesting. It’s reusable for any Disney resort and may even be suitable for any theme park anywhere.

Restaurants

From all the references to the BBC, you may well think our approach is only for big content publishers. What if you just want to make a website for your restaurant (Figure 5.15)? Let’s give it a try.

Figure 5.15 A restaurant model.

Every decent restaurant prides itself on the food. Each Dish is the plate of food served up (anything from lapsang souchong tea–smoked salmon to truffled mac-n-cheese).

Each Dish might be created by a particular Chef, adding a certain je ne sais quoi (usually to the price). A Dish gets served as a particular Course, so we know our starters from our desserts. And a Dish will likely have origins in a specific Cuisine (from French to Tex-Mex).

The Dish consists of Ingredients, important information for customers with food allergies. Speaking of which, Dishes may or may not be appropriate for a particular Diet (for example, kosher, halal, and celiac).

These days it’s popular to list a Supplier to give the ingredients some provenance. It’s not just a burger; it’s a Happy Cow Farm grass-fed Angus burger.

We curate a set of Dishes (and courses) in a Menu. Choosing dishes for a menu is a fine art for the restaurateur. Many restaurants will have more than one menu available and may even rotate the menu daily.

Each dish on the menu could be paired with a Wine. Guess what—boundary object alert! Wine is of course a whole other domain that would be modeled separately and then linked to customers from the world of food to the broader world of wine.

Okay, admittedly this sounds like quite a fancy restaurant. And we’ve concentrated on the culinary aspect of the experience. But it pays to keep things focused on the concepts people find most delicious. Food for thought.

Live Music

A favorite example of ours is the world of live music concerts (Figure 5.16), not least because it contains some unpredictability we can account for.

An Act is our term for either a solo artist or a group. If you or more likely your parents, have seen, Fleetwood Mac or the Drifters over the years, you know that “group” can be a fluid term. So for completeness’ sake, perhaps you want to document the Lineup of a specific act.

This is the unpredictability we mentioned. An individual Performer is part of the Lineup rather than part of the Act. Take That are still Take That, regardless of whether Robbie Williams joins one night.

Figure 5.16 A music concert model.

A Performance is a single gig on a single date. Though maybe the ­hardest-working acts in show business give more than one performance each day.

Of course you care about each Song in the performance. (By the way, there’s another possible boundary object.) But you also want to know which songs were in the Setlist for a given performance. Believe it or not, there are true fans out there who log this stuff.

A Venue (Madison Square Garden, Ronnie Scott’s Jazz Club) holds a performance. Each performance can be part of a Tour, covering many venues across many Locations.

Finally, each performance, or an entire tour, could be in a certain Genre. ­Musical genre is another boundary object. It connects the gig to a bigger canvas of similar music, past and present. It also helps avoid Dylan’s weird bluegrass stuff.

And you’re done. She’s a model, and she’s looking good.

As with all these examples, take them and play with them. Run through examples. Look for any instances that would change how the model works. Add or remove objects and relationships until they work for you.

Modeling for the Future

The domain model maps the world of your chosen subject. It doesn’t care which interfaces you’ll build. It doesn’t care what content you have. It models what your content will be about. Because as hard as it may be to swallow, no one cares about your content. They care about what they care about. Fine wine. Waterskiing. Himalayan travel. And all the points of interest within those topics. When you can map your content to those things, you stay focused on serving their needs. And then maybe they do start to care a little about your content, or at least recognize a kindred passion.

During your research, you’ll definitely want to figure out underlying user needs and pain points. That’s all in day’s work for your average UX designer. But take the time to understand and respect the subject domain itself. That domain has its own structure, rules, and quirks. It shows everyone the real things that your audience cares about.

The model sets you up for the future. Use it to plan the content needed to serve the subject. Use it to uncover gaps in your inventory. Use it to determine which content makes the cut. Use it to guide the natural navigation of your product. Mapping content to concepts helps maintain structural integrity as your inventory scales. Whether you have a few dozen content resources or a few thousand, relationships between them remain the same. Don’t feel pressured to represent the entire domain with content, at least not all at once. You’re
free to choose which parts of the model you’ll expose in your interface designs. Remember, this isn’t a site map.

Content changes often. Every good content strategist will tell you to keep it fresh. To a lesser degree, interfaces are subject to change. We update our visual identity. Change our layouts. Build whole new interfaces for emerging technology. But beneath all the content and UI lies the truth of what they represent. Of course, we can’t claim that the domain itself never changes. New knowledge has increased our understanding of everything from astronomy to zoology. Yet as we dive from the surface of publishing and presentation to the depths of domain, change happens less.

Regardless of what you publish, or how often, follow the advice of your experts and users. Surface the meaningful relationships that give form to a subject. Everything you build is just a digital representation of something real. Understanding that reality should be where any design starts. Our content is just a means to someone’s end.

Modeling—A Team Sport

AN INTERVIEW WITH MICHAEL SMETHURST

For more than a decade, Michael Smethurst has been one of the UK’s most influential practitioners of domain modeling and structured content. A former BBC information architect, he writes extensively about web design and architecture at http://smethur.st. Michael now works within the complicated processes of UK Parliament, bringing sense and structure to parliamentary business information. We caught up with him to get a few tips about running modeling sessions.

What’s the best way to run a domain modeling session?

Domain-driven design (DDD) is a team sport. It allows the whole team to immerse themselves in the gnarly details of the information space. We don’t run them with any hard-and-fast rules. How we schedule a session largely depends on the culture and politics of the organization. Sometimes it’s good to get people away from their normal work environment. We experiment with different locations to see what works best for conversation.

“Storytelling” might have become a design cliché, but stories and anecdotes are still the best vehicles for informal knowledge exchange. Our DDD sessions work best when we skip formality and get to a story as quickly as possible. We set up the room to avoid anything that could get in the way of conversation and informality. A whiteboard, some pens, and some chairs usually see us through. If we start sketching things out, it’s important that the experts can see what we’re doing and feel able to jump in when we’re getting things wrong. If they grab the pen, so much the better.

Who should you invite to a session?

Make sure there are more of them than there are of you, but keep the group small. You want the domain experts to feel comfortable talking and explaining. That gets more difficult if they’re attempting to explain to a roomful of people. I once sat through a session where the invite had been accidentally forwarded to a chunk of people from the computer department. We ended up with three domain experts and about ten assorted designers, developers, and user researchers. This was not good.

Almost everything else really depends on the culture of the organization. If it tends to be hierarchical, you probably need to look for people at roughly the same level. You don’t want one person doing all the talking and everyone else feeling unable to chip in. If that happens, you’ll never get to free-flowing conversation and anecdotes. Some of the best sessions I’ve taken part in have come when people disagreed about how something works or how a particular situation has been dealt with in the past. Everyone in the room needs to feel comfortable enough to have these conversations.

A bridge person or translator can be handy. Someone the experts and stakeholders already know and trust who can help unlock details you might otherwise miss. If the organization has librarians or archivists or other people used to dealing with the information output of offices, grab one.

Finding the right people can be tricky and might involve trial and error. Most organizations have informal network structures. Take time to find these. Kitchen chats and corridor conversations can be routes to the right people. These are the places you find people you don’t normally work with and who know a lot about your domain. Whoever you end up inviting, it’s important not to handle the session too formally or look like you already know all the questions to ask. We don’t write a script. We let the conversation flow and see where it goes. Occasionally we disappear down rabbit holes and need to nudge things back on track. These people are the experts. We’re there to listen and to attempt to explain the things they’ve explained back to them. Until they smile.

There are no such things as dumb questions, even if some of them sound that way at first. But “dumb” questions often get the best answers. Be humble, show interest, show empathy, and never try to boss the session.

When is the best time to schedule a session?

The usual meeting etiquette applies. Don’t aim for the end of the day, when everyone wants to go home. Don’t start too early. People tend to have morning routines that they don’t want disturbed. Never run over lunch. But do allow enough time. We’ve found that the first session with a new team can take a little while to find its balance. People often assume we arrived from the computer department to talk about computer things. Eventually they understand that we’re not here to talk technology, we’re here to talk about their job and their experiences. That’s when the conversation opens up.

People like to talk about their work. They enjoy explaining their difficulties, and they don’t often get the chance. I remember a trip to the House of Lords Private Bill Office. They spent the first 30 minutes misunderstanding why we were there and trying to figure out which software we wanted to talk about. But after patiently answering our dumb questions, they started to open up. After 45 minutes, the first minor disagreement happened. There was some debate about whether a certain thing had ever happened and what they’d done about it. Past 45 minutes, they forgot we were even there. Stories were told and anecdotes were given. If you get to this point, you’ve pretty much hit pay dirt. The difficult part is sketching quickly enough.

Finally, not all modeling happens in the room. People often realize they’ve forgotten something or misexplained. And the conversations continue, like with the person from the House of Commons Select Committee who followed me to the pub to complain about their information systems and how much additional effort was needed, due to poor design. That’s when I realized the fundamental model we’d been designing with them didn’t match their reality. No one had said anything in our previous meetings. But we’d managed to build enough trust and show this stakeholder enough interest to persuade her to explain her problems. We learned more during 10 minutes in the pub than we’d learned in a two-hour meeting. Informality helps communication.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.129.19.251