Journeys

A journey is the composition tier of the flow lens: a persona's end-to-end arc, assembled from whole business processes. Where a business process is one goal-directed flow, a journey is the sequence of them one actor walks — from first contact to the far side of the goal. It holds no steps of its own; each stage delegates to a business process by name.

sub-domains/ordering/_precise/journeys.vishwakarma
journey ShopperPurchaseArc {
  title  "The shopper's purchase arc"
  actor  platform.v1.Customer
  goal   "A customer discovers a product, buys it, and closes the loop after delivery."
  labels { arc: "customer"  domain: "ordering" }

  stage browse        "Browse the catalog"          process catalog.v1.BrowseCatalog
  stage purchase      "Place and pay for the order" process PlaceAndPayOrder
  stage post_purchase "Review, and maybe return"    process ReviewAndMaybeReturn
}

Three stages, three whole processes. A stage's process reference is by name — a bare name for a process in the same sub-domain, an FQN when it lives in another (catalog.v1.BrowseCatalog is a catalog flow composed into an ordering journey). The stage does not re-declare the flow's steps; it points at the process that owns them, so the leaf flow stays the single source of truth. Rename a step inside PlaceAndPayOrder and the journey is untouched.

flowchart LR
  A["actor · Customer"] --- J["journey · ShopperPurchaseArc"]
  J --> B["BrowseCatalog"]
  J --> P["PlaceAndPayOrder"]
  J --> R["ReviewAndMaybeReturn"]

Why two tiers

The two composition primitives operate at different altitudes:

  • A call step composes one process inside another — a sub-flow invoked mid-flow (FulfilOrder calls ReserveStock).
  • A journey composes at the higher, cross-flow tier — stitching independent, separately-triggered flows into one persona experience.

ShopperPurchaseArc doesn't itself run: its three processes are triggered independently (a browse, a checkout, a post-delivery review). The journey is the narrative that connects them for one actor — the zoom-out from individual flows to the whole experience. A more operational arc reads the same way:

sub-domains/ordering/_precise/journeys.vishwakarma
journey OrderFulfilmentArc {
  title  "The order fulfilment arc"
  actor  platform.v1.System
  goal   "A paid order is reserved, packed, and shipped."
  labels { arc: "operations"  domain: "ordering" }

  stage fulfil "Fulfil the paid order" process FulfilOrder
}

Arcs you design ahead of the build

A stage may reference a process that does not exist yet. That is not an error — it is a forward-looking composition item: the arc is designed before every flow it names is built, and the unresolved stages are counted and marked as planned in the rendered view. Designing the whole arc first, then filling in the flows, is the intended way to work — which is the subject of Reconciliation and the backlog.