Skip to content

Goals ​

A Goal represents what a user wants to achieve. It's the "why" of your work: the outcome that matters to your users.

Important

Goals are always user goals: what the user/customer wants to accomplish. Never project goals, team objectives, or technical milestones.

What Makes a Good Goal? ​

Good goals describe user-desired outcomes, not implementation details:

Bad (Project-Focused)Good (User-Focused)
"Implement OAuth""Log in securely without remembering passwords"
"Add caching layer""Experience fast, responsive page loads"
"Increase test coverage""Trust that the service works reliably"
"Refactor checkout""Complete purchase quickly and confidently"

Goal Fields ​

FieldRequiredDescription
idYesUnique identifier
descriptionYesWhat the user wants to achieve
actorNo*The actor who has this goal
success_criteriaNoHow we know the goal is achieved
tagsNoLabels for filtering and organisation
metaNoCustom key-value metadata

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

Creating Goals ​

bash
et create goal \
  --id "complete_purchase" \
  --description "Successfully purchase products and receive confirmation" \
  --actor "customer" \
  --success-criteria "Order placed, payment processed, confirmation received"

Tags and Metadata ​

Tags are particularly useful for tracking verification status and system source during legacy system conversions.

Tracking Verification Status ​

bash
# Create unverified goal discovered during exploration
et create goal \
  --id "export_reports" \
  --description "Export data in various formats" \
  --actor "admin" \
  --tags "unverified,legacy"

# Mark as verified after confirming against actual system
et update goal export_reports --add-tags "verified" --remove-tags "unverified"

Tracking Source Systems ​

bash
# Mark goal as existing in legacy system only
et create goal \
  --id "batch_import" \
  --description "Import users from CSV file" \
  --actor "admin" \
  --tags "legacy-only" \
  --meta "source=legacy_app"

# Mark goal that exists in both systems
et update goal batch_import --tags "both" --meta "source=legacy_app,new_app"

Filtering by Tags ​

bash
# Find all unverified goals
et list goals --tag unverified

# Find legacy goals not yet migrated
et list goals --tag legacy-only

# Find goals for gap analysis
et list goals --tag "legacy,unverified"

Listing Goals ​

bash
# All goals
et list goals

# Goals for a specific actor
et list goals --actor customer

# JSON format
et list goals --format json

Viewing Goal Details ​

bash
et show goal complete_purchase

Output:

ID:               complete_purchase
Description:      Successfully purchase products and receive confirmation
Actor:            customer
Success Criteria: Order placed, payment processed, confirmation received
Tags:             verified, production
Metadata:         source=legacy_app
Created:          2024-01-15T10:30:00.000Z
Updated:          2024-01-15T10:30:00.000Z

Updating Goals ​

bash
et update goal complete_purchase \
  --success-criteria "Order placed, payment processed, confirmation email and SMS sent"

# Update tags and metadata
et update goal complete_purchase --add-tags "verified" --meta "last_verified=2024-01-15"

Removing Goals ​

bash
# Will warn if referenced by interactions or journeys
et remove goal old_goal

# Force removal
et remove goal old_goal --force

Reframing Technical Work as User Goals ​

When you have technical work, find the user need behind it:

Example: Database Optimization ​

Task: Add database indexes

Ask: Why? → Queries are slow → Pages load slowly → Users wait

User Goal:

bash
et create goal \
  --id "fast_browsing" \
  --description "Browse products without delays or waiting" \
  --actor "customer" \
  --success-criteria "Page loads under 2 seconds"

Example: Security Update ​

Task: Implement 2FA

Ask: Why? → Prevent unauthorized access → Protect user data → Users feel safe

User Goal:

bash
et create goal \
  --id "account_security" \
  --description "Feel confident that my account and data are protected" \
  --actor "customer" \
  --success-criteria "Multiple auth options, breach notifications, session management"

Validation ​

Goals without actors are flagged during validation:

bash
et validate
Warnings:
  ! [goal/orphan_goal] Goal is not linked to any actor (orphan goal)

Best Practices ​

  1. Write from the user's perspective: "I want to..." not "We need to..."
  2. Focus on outcomes: What state does the user want to reach?
  3. Be specific but not technical: Users don't care about implementation
  4. Include success criteria: How will the user know they've succeeded?

Next Steps ​

Work matters when it helps real people achieve their goals.