That made me chuckle. Caution, musings ahead.
Much information around Bounded Contexts is in terms of artifacts: models, ubiquitous languages, context maps, tech stacks, deployment strategies, etc. I prefer to work toward what it means to be within a context, and the purpose of a boundary.
I see a context as a place for making decisions and communicating the results to the world. A Bounded Context, as we are using it, is an area in which collaborators make decisions. The outline forms as we observe the decisions they make: what is common, what is different, who shares data, and why.
Pockets of overlap tell us about the relevance of one decision to another. A Bounded Context is a "best fit" around some decision points, within a sparseness tolerance. All elements of a Bounded Context work toward the same decision set, which determines Aggregate shapes.
A boundary signals a shift in consistency; crossing one affects data freshness. We have several boundaries in play:
- An Aggregate is the most consistent, as all of its data changes together
- Projections and (Workflow|Saga|Process Manager)s are eventually consistent, as they operate in response to Aggregate decisions
- There is a natural delay in propagating changes
- A Bounded Context forms when Projections and Workflows collaborate with certain kinds of Aggregates
- Organizing along these lines keeps SLAs low between Aggregates, Projections, and Workflows
- Decisions from outside the best-fit (by other Bounded Contexts) are less consistent with Projections and Workflows than Aggregates
So, a Bounded Context is the outermost boundary in a series of shifts in consistency, each of which affects data freshness at one or more decision points.
That abstraction has definitely helped me reason about domain models.