Inside one context
Words should have one stable meaning that the team can use confidently in code and conversation.
Ubiquitous language means the words used by developers, domain experts, analysts, and stakeholders should line up with the words in the code and the model. If the same term means different things in different parts of the business, that is not a naming nuisance. It is a design signal.
In commerce systems, words like order, fulfillment, shipment, payment, refund, reservation, and invoice can look shared while actually carrying different meanings in different workflows. Ubiquitous language helps expose those differences before they rot the model.
Language shapes design because names influence how teams think. If the code says Order but finance means invoice state, fulfillment means shipment-ready work, and customer support means the entire customer-visible lifecycle, then the model is already under strain.
DDD treats this as a first-class issue. Shared language inside a bounded context should be precise and intentional. When the language diverges, that often means the context should diverge too.
Words should have one stable meaning that the team can use confidently in code and conversation.
The same word can legitimately mean different things, as long as the context boundary makes that explicit.
Better names reduce translation cost and make model drift easier to detect.
Order may mean a customer commitment. In fulfillment, it may mean a pick-pack-ship instruction set. In finance, it may barely matter compared with payment settlement. One word, three meanings, three design consequences.
package org.javaomnibus.ecommerce.ordering;
public record OrderId(String value) {}
package org.javaomnibus.ecommerce.fulfillment;
public record ShipmentRequestId(String value) {}
// The goal is not to invent names for fun.
// The goal is to stop pretending one term covers every business meaning equally well.