Skip to content

Journeys ​

A Journey ties together an Actor, a Goal, and a sequence of Interactions into a complete user story. It's the "script" for how a user achieves their goal.

What is a Journey? ​

A journey answers: "How does this user accomplish their goal, step by step?"

bash
et create journey \
  --id "checkout_flow" \
  --actor "customer" \
  --goal "complete_purchase" \
  --steps "browse_products,add_to_cart,view_cart,checkout,receive_confirmation" \
  --narrative "Customer finds products, builds their cart, completes checkout, and receives confirmation"

Journey Fields ​

FieldRequiredDescription
idYesUnique identifier
actorYesThe protagonist (who benefits from completing this journey)
goalYesThe goal achieved at journey's end
stepsYesComma-separated interaction IDs in order
narrativeNoHuman-readable description of the flow
tagsNoLabels for filtering and organisation
metaNoCustom key-value metadata

Creating Journeys ​

bash
et create journey \
  --id "support_resolution" \
  --actor "customer" \
  --goal "get_issue_resolved" \
  --steps "submit_ticket,receive_response,provide_details,get_resolution" \
  --narrative "Customer submits issue, works with support, and gets their problem solved"

Understanding Journey Actors vs Step Actors ​

The journey's actor field identifies the protagonist — the person who benefits from completing the journey. However, individual steps in the journey can be performed by different actors:

bash
# Customer is the protagonist (who benefits)
et create journey \
  --id "support_flow" \
  --actor "customer" \
  --goal "get_issue_resolved" \
  --steps "submit_ticket,support_agent_investigates,provide_solution"

# Even though "support_agent_investigates" is performed BY a support agent,
# the journey's actor is still "customer" because THEY benefit from the outcome.

This design reflects reality: the customer's goal matters most, even though achieving it requires work by multiple people.

Tags and Metadata ​

Tags help track documentation status, testing coverage, and journey variants.

Tracking Documentation and Testing ​

bash
# Create journey with documentation status
et create journey \
  --id "checkout_flow" \
  --actor "customer" \
  --goal "complete_purchase" \
  --steps "browse,add_to_cart,checkout" \
  --tags "documented,tested"

# Mark journey as needing review
et update journey checkout_flow --add-tags "needs-review"

Tracking Journey Variants ​

bash
# Tag different versions of similar journeys
et create journey \
  --id "quick_checkout" \
  --actor "customer" \
  --goal "complete_purchase" \
  --steps "quick_buy,express_checkout" \
  --tags "variant,express" \
  --meta "variant_of=checkout_flow"

et create journey \
  --id "guest_checkout" \
  --actor "customer" \
  --goal "complete_purchase" \
  --steps "browse,add_to_cart,guest_checkout" \
  --tags "variant,guest" \
  --meta "variant_of=checkout_flow"

Finding Journeys ​

bash
# Find documented journeys
et list journeys --tag documented

# Find journeys needing review
et list journeys --tag needs-review

# Find all variants of a flow
et list journeys --tag variant --format json | jq '.[] | select(.meta.variant_of == "checkout_flow")'

Listing Journeys ​

bash
# All journeys
et list journeys

# Journeys for a specific actor
et list journeys --actor customer

# Journeys for a specific goal
et list journeys --goal complete_purchase

# JSON format
et list journeys --format json

Viewing Journey Details ​

bash
et show journey checkout_flow

Output:

ID:        checkout_flow
Actor:     customer
Goal:      complete_purchase
Steps:
  1. browse_products
  2. add_to_cart
  3. view_cart
  4. checkout
  5. receive_confirmation
Narrative: Customer finds products, builds their cart, completes checkout, and receives confirmation
Tags:      documented, tested
Created:   2024-01-15T10:30:00.000Z
Updated:   2024-01-15T10:30:00.000Z

Updating Journeys ​

bash
# Add a step
et update journey checkout_flow \
  --steps "browse_products,add_to_cart,apply_coupon,view_cart,checkout,receive_confirmation"

# Update narrative
et update journey checkout_flow \
  --narrative "Updated narrative describing the flow"

# Update tags and metadata
et update journey checkout_flow --add-tags "production" --meta "last_reviewed=2024-01-15"

Removing Journeys ​

bash
et remove journey old_journey

Journeys aren't referenced by other entities, so removal doesn't require --force.

The Complete Picture ​

A journey connects all the pieces:

┌─────────────┐     ┌──────────────────┐     ┌───────────────────┐
│    Actor    │────▶│       Goal       │◀────│    Interactions   │
│  (Customer) │     │ (Complete Order) │     │ (browse, cart...) │
└─────────────┘     └──────────────────┘     └───────────────────┘
       │                    ▲                         │
       │                    │                         │
       └────────────────────┼─────────────────────────┘
                            │
                    ┌───────────────┐
                    │    Journey    │
                    │ (Checkout     │
                    │  Flow)        │
                    └───────────────┘

Validation ​

Journeys are validated for:

  • Actor exists: Journey must reference a valid actor
  • Goal exists: Journey must reference a valid goal
  • All steps exist: Every interaction ID must exist
  • Goal alignment: Warning if goal doesn't belong to actor
bash
et validate
Errors:
  ✗ [journey/checkout_flow] References non-existent interaction step 'missing_step'

Warnings:
  ! [journey/checkout_flow] Goal 'complete_purchase' is not assigned to actor 'customer'

Note: Steps can be performed by any actor. The journey's actor field represents who benefits from the outcome, not necessarily who performs every step.

Best Practices ​

  1. One journey per goal: Each journey should achieve exactly one goal
  2. Logical step order: Steps should follow natural user flow
  3. Complete the story: Journey should end with goal achieved
  4. Write narratives: Help humans understand the flow at a glance

Example: Multi-Journey Goal ​

Sometimes a goal can be achieved via different journeys:

bash
# Same goal, different journeys
et create journey \
  --id "quick_checkout" \
  --actor "customer" \
  --goal "complete_purchase" \
  --steps "quick_buy,express_checkout,receive_confirmation" \
  --narrative "Returning customer uses saved info for fast checkout"

et create journey \
  --id "full_checkout" \
  --actor "customer" \
  --goal "complete_purchase" \
  --steps "browse_products,add_to_cart,view_cart,checkout,receive_confirmation" \
  --narrative "New customer goes through full checkout flow"

Next Steps ​

Work matters when it helps real people achieve their goals.