Files
2025-11-30 08:57:33 +08:00

181 lines
4.8 KiB
Markdown

# User Story Template
Use this template when creating user story issues in GitHub Projects. Copy the structure below into the issue description.
---
## User Story: [Brief title from user perspective]
### Story
**As a** [specific user type/persona],
**I want** [goal or capability],
**So that** [benefit or value].
---
### Context
[Optional: Additional background or context that helps understand this story. Why is this needed? What problem does it solve?]
---
### Acceptance Criteria
[Define specific, testable conditions that must be met for this story to be considered complete]
> Format Option 1: Given-When-Then
- **Given** [context or starting state]
**When** [action taken]
**Then** [expected outcome]
- **Given** [another context]
**When** [another action]
**Then** [another outcome]
> Format Option 2: Simple Checklist
- [ ] Criterion 1: [Specific, observable outcome]
- [ ] Criterion 2: [Specific, observable outcome]
- [ ] Criterion 3: [Specific, observable outcome]
---
### Notes & Assumptions
[Optional: Any assumptions, constraints, or additional notes]
**Assumptions:**
- [Assumption 1]
- [Assumption 2]
**Constraints:**
- [Constraint 1]
- [Constraint 2]
**Out of Scope:**
- [What's NOT included in this story]
---
### Definition of Done
At story level, done means:
- [ ] All acceptance criteria met
- [ ] Code reviewed and merged
- [ ] Unit tests written and passing
- [ ] Integration tests passing (if applicable)
- [ ] Documented (user-facing docs, API docs, etc.)
- [ ] Tested in staging environment
- [ ] Acceptance confirmed by product owner/stakeholder
---
### Tasks
[Tasks will be created as child issues of this story. Link them here when created]
- Link to Task 1
- Link to Task 2
- [Tasks will be linked as children when created]
---
**Parent:** [Link to Epic Issue]
**Children:** [Task Issues will be linked here]
---
## Examples
### Example 1: Campaign Filtering
**As a** marketing manager,
**I want** to filter campaigns by date range,
**So that** I can analyze performance for specific time periods.
**Acceptance Criteria:**
- [ ] Date picker UI allows selection of start date and end date
- [ ] Only campaigns with activity within the selected date range are displayed
- [ ] If end date is before start date, system shows validation error
- [ ] "Clear filters" button returns to showing all campaigns
- [ ] Selected date range is preserved when navigating away and returning
**Notes:**
- Use native browser date pickers for best UX
- Default to "last 30 days" on initial page load
---
### Example 2: Password Reset
**As a** user who forgot my password,
**I want** to receive a password reset link via email,
**So that** I can regain access to my account.
**Acceptance Criteria:**
- **Given** I click "Forgot Password" on the login page
**When** I enter my email address and submit
**Then** I receive an email with a reset link within 2 minutes
- **Given** I click the reset link in the email
**When** the link is less than 1 hour old
**Then** I'm taken to a page to set a new password
- **Given** I enter a new password meeting requirements (8+ chars, etc.)
**When** I submit the new password
**Then** my password is updated and I'm redirected to login
- **Given** I click a reset link
**When** the link is more than 1 hour old
**Then** I see an error message saying the link expired
**Assumptions:**
- User email must already exist in system
- Reset links expire after 1 hour for security
**Out of Scope:**
- Multi-factor authentication (separate story)
- Account recovery without email access (separate story)
---
### Example 3: File Upload
**As a** content creator,
**I want** to upload image files to my media library,
**So that** I can use them in my posts and campaigns.
**Acceptance Criteria:**
- [ ] "Upload" button is clearly visible in media library
- [ ] Clicking "Upload" opens file browser allowing image selection
- [ ] Supported formats: JPG, PNG, GIF, WebP (max 10MB per file)
- [ ] Upload progress indicator shows during upload
- [ ] On success, uploaded image appears in media library immediately
- [ ] On failure (wrong format, too large), clear error message is shown
- [ ] Multiple files can be selected and uploaded at once
**Technical Notes:**
- Images should be automatically resized/optimized on server
- Store originals and generate thumbnails
---
## INVEST Check
Before finalizing a story, verify it meets INVEST criteria:
- [ ] **Independent**: Can be completed without depending on other stories
- [ ] **Negotiable**: Details are discussable, not fixed implementation
- [ ] **Valuable**: Delivers clear value to users or stakeholders
- [ ] **Estimable**: Team can reasonably estimate size/effort
- [ ] **Small**: Fits within a single iteration (1-5 days)
- [ ] **Testable**: Has clear acceptance criteria that can be verified
If any criteria aren't met, refine the story before committing to it.