Vì sao chủ đề quan trọng
Bài 1 cho bạn một danh sách tính năng có bằng chứng: biết món còn hay hết trước khi đi, có phần cơm chờ sẵn khi tan lớp, nhận món đúng khung giờ. Nếu đổ thẳng danh sách đó vào backlog thành một cột dài, bạn sẽ mất hai thứ. Thứ nhất là bối cảnh: không ai thấy story "chọn khung giờ nhận" nằm ở đâu trong một bữa trưa. Thứ hai là khả năng cắt: bạn không biết phải làm gì tối thiểu để có một thứ chạy được từ đầu tới cuối.
Chị Lan đặt một ràng buộc rất cụ thể: "Học kỳ 2 phải chạy thử được ở một quầy." Đó không phải yêu cầu làm một nửa ứng dụng. Đó là yêu cầu làm một ứng dụng mỏng nhưng trọn vẹn, để một sinh viên thật ở quầy cơm thật đặt được một suất thật và ăn được. Story map là công cụ giúp bạn thấy chỗ cắt đó.
Bài này nhận đầu vào là danh sách tính năng của bài 1 và future journey của khóa Persona & User Journey dựa trên bằng chứng. Đầu ra là một story map có xương sống, có lát cắt phát hành, và một walking skeleton cho đợt chạy thử.
Bức tranh lớn
Bản đồ câu chuyện người dùng (story map), do Jeff Patton phổ biến, có ba lớp:
- Xương sống (backbone): hàng trên cùng, các hoạt động lớn theo thứ tự thời gian, viết bằng động từ. Đọc từ trái sang phải là kể lại một bữa trưa.
- Các story: xếp dọc dưới mỗi hoạt động, càng lên trên càng cần thiết.
- Lát cắt phát hành (release slice): các đường kẻ ngang cắt qua toàn bộ bản đồ. Mỗi lát là một bản phát hành có thể dùng được.
Với Căng tin số, xương sống có hai làn. Làn trên là sinh viên. Làn dưới là phía căng tin, vì ứng dụng chỉ chạy được khi người nấu và người bán cũng làm phần việc của mình.
flowchart TD
subgraph SV[Làn sinh viên]
A1[Xem thực đơn] --> A2[Đặt món]
A2 --> A3[Thanh toán]
A3 --> A4[Nhận món]
A4 --> A5[Phản hồi]
end
subgraph CT[Làn căng tin]
B1[Chốt thực đơn] --> B2[Nấu theo đơn]
B2 --> B3[Giao món]
B3 --> B4[Đối soát]
end
B1 -.-> A1
A3 -.-> B2
B3 -.-> A4
A5 -.-> B4Những mũi tên đứt nét là chỗ hai làn chạm nhau. Đó cũng là nơi lỗi hay xảy ra nhất, vì mỗi làn do một nhóm người khác nhau làm.
Ví dụ chi tiết
Bước 1. Dựng xương sống từ journey. Lấy future journey của Minh Anh, gộp các bước nhỏ thành hoạt động. Phía sinh viên: Xem thực đơn → Đặt món → Thanh toán → Nhận món → Phản hồi. Phía căng tin lấy từ lời các bên liên quan. Anh Tuấn: "Thực đơn ngày mai chốt lúc 4 giờ chiều hôm trước" thành Chốt thực đơn. Cô Hạnh: "Cô nấu theo mẻ từ 10 giờ 30" thành Nấu theo đơn. Nhân viên quầy trao suất cho người đặt thành Giao món. Anh Tuấn: "Cuối ngày tôi mất cả tiếng đối soát tiền mặt với chuyển khoản" thành Đối soát.
Bước 2. Treo story dưới mỗi hoạt động. Viết ngắn, mỗi thẻ một ý. Dưới Đặt món có: chọn suất cơm theo R1, chọn khung giờ nhận, sửa hoặc hủy đơn trước 10:00, đặt theo nhóm 20–30 suất. Dưới Nấu theo đơn có: xem tổng số suất theo món lúc 10:00, in danh sách cho bếp. Cô Hạnh nói "Giờ cao điểm cô không cầm điện thoại được", nên mọi thứ cho bếp phải là bản in hoặc màn hình treo, không phải điện thoại.
Bước 3. Kẻ lát cắt. Câu hỏi cho lát đầu: "Thiếu thẻ nào thì một sinh viên ở quầy cơm không thể đặt, trả, nhận và ăn một suất?" Mọi thẻ không qua được câu hỏi này đều xuống lát dưới.
| Hoạt động | Lát 1 walking skeleton | Lát 2 | Lát 3 |
|---|---|---|---|
| Xem thực đơn | Thực đơn quầy cơm và trạng thái còn hay hết | Thành phần và chất gây dị ứng | Thực đơn cả 6 quầy |
| Đặt món | Một suất theo R1, chọn khung giờ, chốt 10:00 | Sửa và hủy đơn | Đặt theo nhóm cho sự kiện |
| Thanh toán | Chuyển khoản QR trả trước, đối chiếu tay | Xác nhận tự động | Phiếu suất hỗ trợ theo R4 |
| Nhận món | Đọc mã đơn 4 số ở quầy | Tự giải phóng phần sau 30 phút theo R3 | Ẩn loại thanh toán khi nhận |
| Phản hồi | Một ô góp ý gửi thẳng Anh Tuấn | Đánh giá từng món | Báo cáo cho Chị Lan |
| Chốt thực đơn | Anh Tuấn nhập món trước 16:00 | Sao chép thực đơn tuần trước | Đổi món trong ngày khi hết |
| Nấu theo đơn | Bản in tổng suất theo món lúc 10:00 | Màn hình bếp | Gợi ý lượng nấu theo lịch sử |
| Giao món | Danh sách đơn theo khung giờ trên máy tính bảng | Đánh dấu đã giao bằng một chạm | Quét mã QR trên điện thoại |
| Đối soát | Xuất file đơn đã trả và đã nhận | Khớp tự động với sao kê | Hoàn tiền do quản lý duyệt theo R6 |
Bước 4. Kiểm tra lát 1 với các ràng buộc đã biết. Đăng nhập: Chị Lan yêu cầu "bằng mã số sinh viên qua hệ thống của trường", nên lát 1 chỉ mở cho sinh viên. Giảng viên và nhân viên trường, những người Anh Tuấn nhắc tới, chờ lát 3 cùng cách giải mâu thuẫn C2. Thanh toán: lát 1 theo ý Anh Tuấn, trả trước. Nỗi lo của Minh Anh "lỡ ra tới nơi hết món" được trả lời bằng chính việc đặt trước: phần đã trả là phần đã giữ. Giờ chốt: 10:00 theo Cô Hạnh, không phải 11:15, vì bếp không nấu kịp.
Bước 5. Đặt mục tiêu cho từng lát. Mỗi lát cần một câu "phát hành để học điều gì". Lát 1: có ít nhất 50 suất đặt trước mỗi ngày ở quầy cơm không, và bếp có làm việc được với bản in không. Lát 2: tự động hóa có bớt được giờ đối soát của Anh Tuấn không. Lát 3: mở rộng có giữ được chất lượng không.
flowchart TD
S[Story map đầy đủ] --> Q{Thiếu thẻ này thì có ăn được một suất không}
Q -->|Không ăn được| L1[Lát 1 walking skeleton]
Q -->|Vẫn ăn được| Q2{Có giúp học điều lát 2 cần học}
Q2 -->|Có| L2[Lát 2]
Q2 -->|Không| L3[Lát 3 hoặc sau]
L1 --> P[Chạy thử ở quầy cơm học kỳ 2]
P --> R[Đo và điều chỉnh map]
R --> SMẫu để dùng ngay
Tải mẫu: Story map và user story (Excel)
Nếu chưa tải, chép khung sau ra giấy hoặc bảng tính. Mỗi dòng là một thẻ story.
Làn | Hoạt động | Story ngắn | Lát | Bằng chứng
Sinh viên | Đặt món | Chọn khung giờ nhận | 1 | Minh Anh, lớp 12:45
Căng tin | Nấu theo đơn | In tổng suất theo món lúc 10:00 | 1 | Cô Hạnh, không cầm điện thoại
Sinh viên | Xem thực đơn | Xem chất gây dị ứng của món | 2 | Thảo Vy, dị ứng đậu phộng
Lộ trình từng bước
- Gộp các bước của future journey thành 4 tới 6 hoạt động, viết bằng động từ.
- Thêm làn cho những vai trò phải làm việc thì ứng dụng mới chạy: bếp, quầy, quản lý.
- Viết story ngắn dưới mỗi hoạt động, mỗi thẻ một ý, kèm tên người đã nói.
- Sắp thứ tự dọc: thẻ cần thiết nhất lên trên.
- Kẻ lát 1 bằng câu hỏi "thiếu thẻ này thì có đi hết hành trình không".
- Kiểm tra lát 1 với ràng buộc của nhà tài trợ và các quy tắc nghiệp vụ.
- Viết cho mỗi lát một câu "phát hành để học điều gì".
- Đi qua map cùng Cô Hạnh và Anh Tuấn, kể bằng lời từ trái sang phải.
Thói quen & kỷ luật
| Thói quen | Tần suất | Kết quả mong đợi |
|---|---|---|
| Kể lại map thành lời từ trái sang phải | Mỗi lần sửa map | Phát hiện chỗ hổng trong hành trình |
| Mời một người phía căng tin xem map | Mỗi hai tuần | Làn căng tin không bị bỏ quên |
| Xét lại đường kẻ lát 1 | Sau mỗi đợt phỏng vấn mới | Lát 1 không phình ra theo thời gian |
| Gắn tên người nói vào thẻ | Mỗi thẻ mới | Mọi thẻ truy được về bằng chứng |
Cần luyện tập
Drill một: Trên story map Căng tin số, giả sử Chị Lan yêu cầu đưa suất hỗ trợ vào lát 1 vì Thảo Vy và khoảng 300 sinh viên khác cần nó. Hãy viết ra những thẻ phải thêm, những quy tắc phải xử lý theo R4, và đề xuất bạn sẽ đổi thẻ nào ra khỏi lát 1 để giữ nó mỏng.
Drill hai: Vẽ story map cho một việc quen thuộc như đăng ký học phần ở trường bạn. Tìm xương sống, rồi kẻ walking skeleton. Kiểm tra: lát đó có đi hết mọi hoạt động không?
Drill ba: Lấy một backlog dạng danh sách mà bạn từng làm trong đồ án. Xếp lại thành story map và đếm có bao nhiêu thẻ không thuộc về hoạt động nào. Đó thường là những thẻ không ai cần.
Checklist hành động tuần này
- [ ] Viết xương sống hai làn cho Căng tin số
- [ ] Treo ít nhất ba story dưới mỗi hoạt động
- [ ] Kẻ lát 1 và kiểm tra nó đi hết chín hoạt động
- [ ] Viết câu "phát hành để học điều gì" cho ba lát
- [ ] Kể lại map thành lời cho một người ngoài nhóm nghe
Chỉ số cho cách làm
Các con số dưới đây đo cách nhóm làm bước này, không đo app có thành công hay không. Câu hỏi app có hiệu quả không, và làm gì tiếp, là việc của khóa Đo lường thành công.
| Loại chỉ số | Ví dụ | Vai trò |
|---|---|---|
| North Star | Số sinh viên nhận suất đặt trước đúng khung giờ mỗi ngày ở quầy cơm | Cho biết walking skeleton có thật sự chạy |
| Chỉ số dẫn dắt | Số đơn đặt trước trước 10:00 mỗi ngày | Báo sớm nhu cầu thật trong đợt chạy thử |
| Chỉ số vận hành | Số đơn bếp nấu sai so với bản in | Kiểm tra làn căng tin có theo kịp |
| Chỉ số bảo vệ | Thời gian đối soát cuối ngày của Anh Tuấn | Đảm bảo ứng dụng không làm việc nặng hơn |
Dấu hiệu bạn đã thành thạo
Bạn nhìn một danh sách tính năng và thấy ngay hoạt động nào bị thiếu. Bạn tự thêm làn cho người vận hành mà không cần ai nhắc. Bạn bảo vệ được lát 1 khi có người muốn nhét thêm, bằng câu hỏi "thiếu nó thì có ăn được một suất không". Và bạn chỉ vào một thẻ bất kỳ là nói được ai đã cần nó.
Cạm bẫy thường gặp
| Cạm bẫy | Biểu hiện | Cách tránh |
|---|---|---|
| Chỉ có làn sinh viên | Bếp và đối soát không có thẻ nào | Thêm làn căng tin ngay từ đầu |
| Lát 1 làm sâu một hoạt động | Thanh toán hoàn hảo nhưng chưa nhận món được | Lát 1 phải chạm mọi hoạt động |
| Lát 1 phình to | Mỗi cuộc họp thêm một thẻ vào lát 1 | Mọi thẻ thêm phải đổi lấy một thẻ ra |
| Xương sống viết bằng màn hình | Màn hình chủ, màn hình giỏ hàng | Viết hoạt động bằng động từ của người dùng |
| Map vẽ xong thì bỏ | Map không đổi sau đợt chạy thử | Cập nhật map sau mỗi lần đo |
Chốt lại
Story map biến danh sách tính năng thành một câu chuyện có thứ tự. Với Căng tin số, xương sống có hai làn: sinh viên Xem thực đơn → Đặt món → Thanh toán → Nhận món → Phản hồi, và căng tin Chốt thực đơn → Nấu theo đơn → Giao món → Đối soát. Lát 1 là walking skeleton cho quầy cơm học kỳ 2: thô ở mọi chỗ nhưng đi hết hành trình, đúng ràng buộc của Chị Lan. Đầu ra là map với ba lát. Bài 3 sẽ biến từng thẻ trên map thành user story viết đầy đủ theo INVEST.