Bạn sẽ học gì
Bạn sẽ học cách viết User Story – công cụ giúp bạn mô tả nhu cầu của người dùng một cách đơn giản, dễ hiểu, không cần biết code. Đây là kỹ năng nền tảng để bạn giao tiếp với nhóm phát triển và đảm bảo sản phẩm đúng nhu cầu.
Khái niệm
User Story là một câu mô tả ngắn gọn về một tính năng từ góc nhìn của người dùng. Nó thường có cấu trúc: 'Là một [vai trò], tôi muốn [mục tiêu] để [lợi ích]'. Ví dụ: 'Là một khách hàng, tôi muốn xem lịch sử đơn hàng để biết các món đã đặt trước đó.' User Story không phải tài liệu kỹ thuật, mà là cách để team hiểu 'ai cần gì và tại sao'.
Liên hệ dễ hiểu
Hãy tưởng tượng bạn đi ăn nhà hàng. Thay vì nói 'cho tôi một cái bánh mì kẹp thịt', bạn nói 'Là một thực khách đói bụng, tôi muốn một bánh mì kẹp thịt để no bụng'. Câu đầu chỉ là món ăn, câu sau cho thấy bạn là ai (thực khách đói), bạn muốn gì (bánh mì), và lợi ích (no bụng). User Story làm rõ cả ba yếu tố đó.
Ví dụ thực tế
Bạn là PM cho app giao đồ ăn. Một user story có thể là: 'Là một người dùng mới, tôi muốn đăng ký bằng email để bắt đầu đặt món.' Câu này giúp team biết: ai (người dùng mới), muốn gì (đăng ký bằng email), tại sao (để bắt đầu đặt món).
Sơ đồ
flowchart TD
A[User Story: Là một <vai trò>] --> B[Tôi muốn <mục tiêu>]
B --> C[Để <lợi ích>]
C --> D[Ví dụ: Người dùng mới muốn đăng ký bằng email để đặt món]Thực hành ngay
Hãy viết một User Story cho chính bạn: 'Là một [vai trò của bạn], tôi muốn [một điều bạn muốn làm hôm nay] để [lợi ích]'. Ví dụ: 'Là một người học, tôi muốn hiểu User Story để viết PRD tốt hơn.' Viết ra giấy hoặc ghi chú.
Tóm tắt
- User Story mô tả nhu cầu từ góc nhìn người dùng.
- Cấu trúc: Là một [vai trò], tôi muốn [mục tiêu] để [lợi ích].
- Không cần kỹ thuật, tập trung vào 'ai, cái gì, tại sao'.
Từ câu mẫu tới một story dùng được
Câu mẫu "Là một [vai trò], tôi muốn [mục tiêu] để [lợi ích]" là điểm bắt đầu tốt, nhưng bản thân nó chưa đủ để đội làm việc. Một story dùng được cần thêm điều kiện xác nhận.
Story chưa dùng được: > Là một khách hàng, tôi muốn xem lịch sử đơn hàng để biết các món đã đặt trước đó.
Câu này đúng nhưng chưa trả lời: xem được bao nhiêu đơn? Sắp xếp thế nào? Đơn đã huỷ có hiện không? Chưa có đơn nào thì màn hình trông ra sao?
Story dùng được là câu trên, cộng thêm:
- Khi tôi mở trang lịch sử, tôi thấy các đơn trong 12 tháng gần nhất, mới nhất lên trước.
- Mỗi đơn hiện: ngày đặt, số tiền, trạng thái, và danh sách món.
- Đơn đã huỷ vẫn hiện, có nhãn "Đã huỷ" rõ ràng.
- Khi tôi chưa có đơn nào, trang hiện dòng "Bạn chưa có đơn hàng nào" kèm nút về trang sản phẩm.
- Ngoài phạm vi lần này: chưa có tìm kiếm trong lịch sử.
Ba câu hỏi biến story mơ hồ thành story rõ
Với mỗi story, hỏi:
- "Chưa có dữ liệu thì sao?" — trạng thái rỗng là màn hình người dùng mới nhìn thấy đầu tiên, và nó gần như luôn bị quên.
- "Nếu hỏng thì người dùng thấy gì?" — lỗi mạng, không có quyền, dữ liệu sai.
- "Nhiều nhất là bao nhiêu?" — 10 đơn hay 10.000 đơn? Con số này đổi hẳn cách làm.
Story tốt có kích thước vừa phải
| Dấu hiệu quá lớn | Cách cắt |
|---|---|
| Không xong trong một sprint | Cắt theo bước trong luồng |
| Có nhiều chữ "và" trong tiêu đề | Mỗi "và" thường là một story riêng |
| Đội không ước lượng được | Thiếu hiểu biết — cần trao đổi thêm, không phải ép cho con số |
Điều người mới hay hiểu sai
User story không phải bản đặc tả thu nhỏ. Nó là lời nhắc rằng cần có một cuộc trao đổi. Giá trị nằm ở cuộc trao đổi đó và ở điều kiện xác nhận — không nằm ở chữ trên thẻ.
Nếu đội bạn viết story rồi chuyển cho lập trình viên mà không nói chuyện, bạn đang có phần tệ nhất của cả hai cách: vừa thiếu chi tiết của tài liệu đặc tả, vừa mất cuộc trao đổi mà story lẽ ra phải tạo ra.
Sai lầm thường gặp
| Sai lầm | Sửa thế nào |
|---|---|
| Phần "để…" chỉ lặp lại phần "tôi muốn…" | Nếu không viết được lợi ích thật, story có thể không đáng làm |
| Mô tả sẵn giải pháp kỹ thuật | Mô tả kết quả mong muốn; để đội chọn cách |
| Không có ca ngoại lệ | Luôn thêm ít nhất một |
| Không nêu phần ngoài phạm vi | Một dòng tiết kiệm nhiều tranh cãi |
Làm ngay
Lấy một story đội bạn đang có. Thêm vào ba thứ: trạng thái khi chưa có dữ liệu, một ca lỗi, và một dòng "ngoài phạm vi lần này". Rồi đưa cho người sẽ làm nó và hỏi: còn gì bạn vẫn phải đoán không? <!--/les-append-->