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.