skills/user-story/SKILL.md
Viết/rà soát/tách user story, acceptance criteria, INVEST, epic, backlog từ requirement/PRD/bug/feature.
npx skillsauth add hoangvantuan/claude-plugin user-storyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Biến input thô thành user story có persona rõ, vấn đề đúng, outcome đo được, và acceptance criteria xác minh được.
Dùng khi user cần:
Không dùng khi việc không liên quan đến giá trị người dùng.
User story tốt trả lời 5 câu:
Không đề cập kỹ thuật. Story mô tả giá trị và hành vi từ góc nhìn người dùng. Không nhắc đến công nghệ, kiến trúc, giải pháp cài đặt, hay cách triển khai. Ví dụ: viết "đăng nhập nhanh bằng tài khoản Google" thay vì "tích hợp OAuth 2.0 với Google Identity Platform".
Nếu thiếu dữ liệu, đừng bịa. Ghi rõ giả định và hỏi tối đa 3 câu nếu thiếu chặn việc viết.
Persona không cần dài. Nhưng "user" quá chung thường yếu.
Ghi ngắn:
### Persona
- **Nhóm người dùng:** [persona cụ thể]
- **Bối cảnh:** [họ đang ở đâu, dùng sản phẩm lúc nào]
- **Mục tiêu:** [kết quả họ muốn]
- **Nỗi đau:** [điều đang cản họ]
- **Giả định cần kiểm chứng:** [nếu có]
Ưu tiên persona theo hành vi. Ví dụ: "trial user lần đầu đăng nhập" tốt hơn "người dùng".
Trước khi viết story, nêu vấn đề từ góc nhìn người dùng.
### Problem Statement
[Persona] cần một cách để [kết quả mong muốn] vì [root cause], hiện khiến họ [tác động thực tế hoặc cảm xúc].
Tránh nhét sẵn giải pháp. Ví dụ yếu: "User cần nút Google login". Ví dụ tốt: "Trial user cần vào app nhanh vì tạo mật khẩu mới làm họ bỏ dở onboarding".
Nếu input rộng hoặc rủi ro cao, viết hypothesis trước:
### Epic Hypothesis
- **If we** [giải pháp hoặc hướng can thiệp]
- **for** [persona]
- **then we will** [outcome đo được]
- **We will test by:** [prototype, concierge test, landing page, A/B test, phỏng vấn]
- **Valid if:** [metric + timeframe]
Sau đó mới tách epic thành user story.
Dùng format Mike Cohn:
### User Story [ID]
- **Summary:** [tiêu đề ngắn, tập trung vào giá trị]
#### Use Case
- **As a** [persona cụ thể]
- **I want to** [hành động người dùng thực hiện]
- **so that** [outcome người dùng nhận được]
#### Acceptance Criteria
- **Scenario:** [tình huống chính]
- **Given:** [tiền điều kiện]
- **When:** [hành động kích hoạt]
- **Then:** [kết quả quan sát được]
Quy tắc:
When.Then chính.When phải khớp với I want to.Then phải chứng minh so that.When/Then, chuyển sang Split mode.Chấm nhanh:
Nếu trượt Valuable, quay lại problem statement. Nếu trượt Small, tách story.
Khi story quá lớn, thử các pattern theo thứ tự:
Mỗi phần tách phải có giá trị riêng cho người dùng. Không tách theo tầng hệ thống.
Khi user yêu cầu viết story, trả về:
## User Story
### Context
- **Persona:** ...
- **Problem:** ...
- **Assumptions:** ...
### Story
- **Summary:** ...
- **As a** ...
- **I want to** ...
- **so that** ...
### Acceptance Criteria
- **Scenario:** ...
- **Given:** ...
- **When:** ...
- **Then:** ...
### Quality Check
- **INVEST:** ...
- **Split needed:** Yes/No
- **Open questions:** ...
Nếu user yêu cầu nhiều story, dùng bảng tóm tắt trước, rồi viết chi tiết từng story.
Input:
trial user login Google để vào app không cần tạo password
Output:
## User Story
### Context
- **Persona:** Trial user lần đầu vào app.
- **Problem:** Trial user cần vào app nhanh vì tạo mật khẩu mới làm tăng ma sát, hiện khiến họ dễ bỏ dở onboarding.
- **Assumptions:** App đã có trang đăng nhập và hỗ trợ đăng nhập qua Google.
### Story
- **Summary:** Đăng nhập Google để giảm ma sát onboarding.
- **As a** trial user
- **I want to** đăng nhập bằng tài khoản Google
- **so that** tôi vào app ngay mà không cần tạo mật khẩu mới
### Acceptance Criteria
- **Scenario:** Trial user đăng nhập lần đầu bằng Google.
- **Given:** Tôi đang ở trang đăng nhập.
- **Given:** Tôi có tài khoản Google hợp lệ.
- **When:** Tôi chọn "Đăng nhập bằng Google" và cho phép liên kết.
- **Then:** Tôi đã đăng nhập và được chuyển đến bước hướng dẫn sử dụng.
### Quality Check
- **INVEST:** Pass. Story nhỏ, có giá trị, xác minh được.
- **Split needed:** No.
- **Open questions:** Cần xác nhận trang đích sau đăng nhập và trải nghiệm khi đăng nhập Google thất bại.
Dùng script để tạo stub Markdown ổn định, không gọi mạng:
python3 scripts/user-story-template.py --persona "trial user" --action "log in with Google" --outcome "access the app without creating a new password"
Script nằm tại skills/user-story/scripts/user-story-template.py.
so that lặp lại I want to.tools
Bộ nhớ tri thức cấp dự án tự cải tiến: capture bài học, consolidate đúc kết, recall tra cứu + thực thi. Dữ liệu ghi vào memory/ ở gốc repo.
development
Phán quyết go/no-go + ưu tiên cho một hạng mục kỹ thuật, xác minh bằng chứng read-only trước khi kết luận.
tools
Phân tích quyết định/vấn đề bằng Thu Giang Nguyễn Duy Cần: Thuật Tư Tưởng, Dịch Lý, Lão Trang, quân bình.
tools
Phân tích tình huống bằng Kinh Dịch: 64 quẻ, Âm Dương, Ngũ Hành, thời, biến, quân tử.