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
| Field | Required | Description |
|---|---|---|
id | Yes | Unique identifier |
description | Yes | What the user wants to achieve |
actor | No* | The actor who has this goal |
success_criteria | No | How we know the goal is achieved |
tags | No | Labels for filtering and organisation |
meta | No | Custom key-value metadata |
*While optional, goals without actors will be flagged by validation.
Creating Goals
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
# 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
# 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
# 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
# All goals
et list goals
# Goals for a specific actor
et list goals --actor customer
# JSON format
et list goals --format jsonViewing Goal Details
et show goal complete_purchaseOutput:
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.000ZUpdating Goals
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
# Will warn if referenced by interactions or journeys
et remove goal old_goal
# Force removal
et remove goal old_goal --forceReframing 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:
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:
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:
et validateWarnings:
! [goal/orphan_goal] Goal is not linked to any actor (orphan goal)Best Practices
- Write from the user's perspective: "I want to..." not "We need to..."
- Focus on outcomes: What state does the user want to reach?
- Be specific but not technical: Users don't care about implementation
- Include success criteria: How will the user know they've succeeded?
Next Steps
- Interactions: Tasks that help users reach goals
- Journeys: The full path to goal completion