Skip to content

Interactions

An Interaction represents a task or action that helps a user reach their goal. It's the "how": the concrete work that delivers user value.

What Makes a Good Interaction?

Interactions describe user-facing actions or behind-the-scenes work that supports user goals:

bash
# User-facing interaction
et create interaction \
  --id "add_to_cart" \
  --description "Add products to shopping cart for later purchase" \
  --performed-by "customer" \
  --goal "complete_purchase"

# Behind-the-scenes interaction (still tied to user goal)
et create interaction \
  --id "process_payment" \
  --description "Securely process payment and verify transaction" \
  --performed-by "customer" \
  --goal "complete_purchase"

Interaction Fields

FieldRequiredDescription
idYesUnique identifier
descriptionYesWhat the interaction accomplishes
performed_byNoThe actor performing this action
goalsNo*The goals this interaction supports (can be multiple)
tagsNoLabels for filtering and organisation
metaNoCustom key-value metadata

*While optional, interactions without goals will be flagged by validation.

Creating Interactions

bash
et create interaction \
  --id "submit_support_ticket" \
  --description "Submit a support request describing the issue" \
  --performed-by "customer" \
  --goal "get_issue_resolved"

Multi-Goal Interactions

Some interactions support multiple user goals. Use --goals to link an interaction to multiple goals:

bash
# Single goal (traditional approach)
et create interaction \
  --id "export_data" \
  --description "Export customer data" \
  --performed-by "admin" \
  --goal "export_data"

# Multiple goals (when one interaction serves multiple purposes)
et create interaction \
  --id "export_data" \
  --description "Export customer data in standard format" \
  --performed-by "admin" \
  --goals "export_data,backup_data,analytics_prep"

This is useful when a single action contributes to multiple user outcomes.

Tags and Metadata

Tags help track verification status, source systems, and implementation priority for interactions.

Tracking Discovery and Verification

bash
# Create interaction discovered during legacy system exploration
et create interaction \
  --id "export_csv" \
  --description "Export data as CSV file" \
  --performed-by "admin" \
  --goal "export_reports" \
  --tags "legacy,unverified" \
  --meta "discovered_in=admin_panel"

# Mark as verified after testing
et update interaction export_csv --add-tags "verified" --remove-tags "unverified"

Tracking Implementation Status

bash
# Tag interactions by source system
et create interaction \
  --id "bulk_upload" \
  --description "Upload multiple records via file" \
  --performed-by "admin" \
  --goal "batch_import" \
  --tags "legacy-only" \
  --meta "source=legacy_app" \
  --meta "priority=high"

# Update when implemented in new system
et update interaction bulk_upload --tags "both" --meta "source=legacy_app,new_app"

Finding Work with Tags

bash
# Find unverified interactions for a goal
et list interactions --goal export_reports --tag unverified

# Find all legacy-only interactions (gap analysis)
et list interactions --tag legacy-only

# Find high priority items using metadata (via JSON output)
et list interactions --format json | jq '.[] | select(.meta.priority == "high")'

Listing Interactions

bash
# All interactions
et list interactions

# Interactions supporting a specific goal
et list interactions --goal complete_purchase

# JSON format
et list interactions --format json

Viewing Interaction Details

bash
et show interaction add_to_cart

Updating Interactions

bash
et update interaction add_to_cart \
  --description "Add products to cart with quantity selection"

Removing Interactions

bash
# Will warn if referenced by journeys
et remove interaction old_interaction

# Force removal
et remove interaction old_interaction --force

Connecting Technical Work to User Goals

Every piece of technical work should be an interaction tied to a user goal:

Example: API Development

bash
# User goal
et create goal \
  --id "track_order" \
  --description "Know where my order is and when it will arrive" \
  --actor "customer"

# Technical work as interaction
et create interaction \
  --id "order_tracking_api" \
  --description "Real-time order status and delivery tracking" \
  --performed-by "customer" \
  --goal "track_order"

Example: Performance Work

bash
# User goal
et create goal \
  --id "responsive_search" \
  --description "Find products instantly without waiting" \
  --actor "customer"

# Technical work as interaction
et create interaction \
  --id "search_optimization" \
  --description "Optimized search with instant results" \
  --performed-by "customer" \
  --goal "responsive_search"

Validation

Interactions without goals are flagged:

bash
et validate
Warnings:
  ! [interaction/orphan_task] Interaction is not linked to any goal

Best Practices

  1. Always link to a goal: If you can't find a goal, create one or question the work
  2. Describe the user value: Not just what happens, but why it matters
  3. Use active voice: "Process payment" not "Payment is processed"
  4. Keep granularity consistent: Don't mix high-level and detailed interactions

Next Steps

Work matters when it helps real people achieve their goals.