Feature Management¶
Features are the core tracking unit in Klondike. They represent discrete units of work with clear acceptance criteria that can be verified.
The Feature Lifecycle¶
stateDiagram-v2
[*] --> NotStarted: feature add
NotStarted --> InProgress: feature start
InProgress --> Verified: feature verify
InProgress --> Blocked: feature block
Blocked --> InProgress: feature start
Verified --> [*]
Adding Features¶
Create a new feature with description, category, and acceptance criteria:
klondike feature add "User can reset password via email" \
--category core \
--priority 2 \
--criteria "Reset link sent,Link expires in 24h,Password updated on submit"
Feature Options¶
| Option | Description | Example |
|---|---|---|
--category |
Feature category | core, ui, api, docs |
--priority |
Priority level 1-5 | 1 (critical) to 5 (future) |
--criteria |
Acceptance criteria (comma-separated) | "Criterion 1,Criterion 2" |
Priority Levels¶
| Priority | Meaning | When to Use |
|---|---|---|
| P1 | Critical | Blocks everything else |
| P2 | High | Needed for MVP |
| P3 | Medium | Enhances experience |
| P4 | Low | Nice to have |
| P5 | Future | After MVP |
Categories¶
Common categories include:
core- Core functionalityui- User interfaceapi- API endpointsinfrastructure- Setup, CI/CD, toolingdocs- Documentationtesting- Test coveragesecurity- Security featuresperformance- Optimization
Listing Features¶
View all features:
Filter by status:
klondike feature list --status not-started
klondike feature list --status in-progress
klondike feature list --status verified
Get JSON output for scripting:
Starting Work¶
Mark a feature as in-progress:
One Feature at a Time
Focus on one feature at a time. Starting a feature helps track what's actively being worked on across sessions.
Viewing Feature Details¶
See full details for a feature:
This displays:
- Description
- Category and priority
- Status
- Acceptance criteria
- Any notes or evidence
Editing Features¶
Update a feature's metadata or add notes:
# Add notes
klondike feature edit F001 --notes "Consider using OAuth instead"
# Add more acceptance criteria
klondike feature edit F001 --add-criteria "Support Google OAuth"
Verifying Features¶
When a feature is complete, verify it with evidence:
Evidence Required
You must provide evidence when verifying a feature. This prevents premature "victory declaration" where features appear done but haven't been properly tested.
Good evidence includes:
- Test file paths
- Screenshot locations
- API response examples
- Manual test results
Blocking Features¶
If a feature is blocked by external dependencies:
Resume work later:
Import/Export¶
Export Features¶
Export features for backup or sharing:
# Export all features to YAML
klondike export-features features.yaml
# Export only not-started features
klondike export-features backlog.yaml --status not-started
# Export with all internal fields
klondike export-features full-export.yaml --all
Import Features¶
Import features from a file:
# Preview import
klondike import-features features.yaml --dry-run
# Import features
klondike import-features features.yaml
Import Format¶
Features can be imported from YAML or JSON:
# features.yaml
- description: User login with email/password
category: core
priority: 1
acceptance_criteria:
- Login form displays correctly
- Invalid credentials show error
- Valid credentials return JWT
- description: Password reset flow
category: core
priority: 2
acceptance_criteria:
- Reset email sent within 1 minute
- Reset link expires after 24 hours
Best Practices¶
Feature Granularity¶
Too Big (split these up):
- "Implement user authentication"
- "Build the frontend"
Just Right (completable in one session):
- "User can log in with email/password"
- "Display loading spinner during API calls"
Too Small (combine with related work):
- "Add a button"
- "Change color to blue"
Acceptance Criteria¶
Good criteria are:
- ✅ Specific: "User sees 'Saved!' toast after clicking Save"
- ✅ Testable: "API returns 200 with JSON containing 'id' field"
- ✅ Observable: "Log file contains entry with timestamp"
Bad criteria are:
- ❌ Vague: "Works correctly"
- ❌ Unmeasurable: "Fast enough"
- ❌ Subjective: "Looks good"