Vì sao chủ đề quan trọng
Ma trận CRUD ở bài 2 hỏi "dữ liệu này ai chạm vào". Bài này lật ngược góc nhìn: với mỗi người, họ cần làm gì, được phép làm gì, và có story nào cho việc đó không?
Lý do cần góc nhìn thứ hai rất thực tế. Một nhóm sinh viên làm khám phá gần như luôn hiểu sinh viên nhất, vì đó là chính họ. Các vai trò khác thì bị nhìn qua lăng kính sinh viên: bếp là "nơi nấu đồ ăn cho mình", quản lý là "người thu tiền". Kết quả là backlog có hai mươi story cho sinh viên và hai story cho tất cả những người còn lại, trong khi chính những người còn lại mới làm cho căng tin vận hành.
Bài này nhận vào persona và service blueprint (khóa Persona & User Journey dựa trên bằng chứng), quy tắc R1 tới R6 (khóa Hiểu nghiệp vụ trước khi xây) và trang CRUD từ bài 2. Đầu ra là trang Vai trò trong tệp kiểm tra: một bảng sáu vai trò nhân với các hành động, kèm quyền hạn và danh sách vai trò thiếu story.
Bức tranh lớn
Sáu vai trò của Căng tin số là: Sinh viên, Giảng viên và nhân viên trường, Nhân viên quầy, Bếp, Quản lý căng tin, Phòng Quản trị – Đời sống. Ma trận có hai trục: vai trò ở cột, hành động ở dòng. Mỗi ô trả lời một trong bốn giá trị:
- Có: vai trò này làm hành động này, và cần story.
- Xem: chỉ đọc, không thay đổi gì.
- Không: bị cấm, và cấm có chủ ý. Nếu cấm vì một quy tắc, ghi mã quy tắc.
- Hỏi lại: chưa biết. Đây là ô quan trọng nhất.
flowchart TD
A[Liệt kê sáu vai trò] --> B[Liệt kê hành động từ story map và blueprint]
B --> C[Điền Có, Xem, Không, Hỏi lại]
C --> D{Vai trò nào không có ô Có nào?}
D -->|Có vai trò như vậy| E[Cờ đỏ - quay lại ghi chép]
D -->|Không| F{Ô Không nào chưa có quy tắc?}
F -->|Có| G[Hỏi stakeholder vì sao cấm]
F -->|Không| H[Chuyển quyền hạn thành tiêu chí chấp nhận]Hai phép đọc ma trận quan trọng nhất là đọc theo cột và đọc ô Không. Đọc theo cột: một vai trò mà cả cột chỉ có Xem và Không là vai trò hệ thống đang phớt lờ. Đọc ô Không: mỗi lệnh cấm là một yêu cầu phân quyền mà lập trình viên phải xây và người kiểm thử phải thử.
Ví dụ chi tiết
Viết tắt trong bảng: SV là sinh viên, GV-NV là giảng viên và nhân viên trường, QL là quản lý căng tin, QT-ĐS là Phòng Quản trị – Đời sống.
| Hành động | SV | GV-NV | Quầy | Bếp | QL | QT-ĐS |
|---|---|---|---|---|---|---|
| Xem thực đơn ngày | Có | Có | Có | Có | Có | Xem |
| Đặt trước một suất | Có | Hỏi lại, C2 | Không | Không | Không | Không |
| Đặt suất nhóm 20 tới 30 suất | Hỏi lại | Hỏi lại | Không | Không | Có, đang ghi sổ | Không |
| Thanh toán đơn | Có | Có | Xác nhận | Không | Xem | Không |
| Huỷ đơn | Có, trước giờ chốt | Có, trước giờ chốt | Hỏi lại | Không | Có | Không |
| Duyệt hoàn tiền | Không | Không | Không, R6 | Không | Có, R6 | Không |
| Dùng phiếu suất hỗ trợ | Có, nếu được cấp | Không | Xác nhận, R4 | Không | Không | Không |
| Cấp và thu hồi phiếu | Không | Không | Không | Không | Hỏi lại | Hỏi lại |
| Đánh dấu hết món | Không | Không | Hỏi lại | Hỏi lại | Có, R2 | Không |
| Xem danh sách cần nấu | Không | Không | Xem | Có | Xem | Không |
| Giao món cho người đặt | Không | Không | Có | Không | Không | Không |
| Gửi phản hồi | Có | Có | Không | Không | Không | Không |
| Trả lời phản hồi | Không | Không | Không | Không | Có | Hỏi lại |
| Xem báo cáo | Không | Không | Không | Hỏi lại | Có | Có |
| Chốt thực đơn ngày mai | Không | Không | Không | Hỏi lại | Có, R2 | Không |
| Đối soát cuối ngày | Không | Không | Hỏi lại | Không | Có | Không |
Quyền hạn theo R6. Dòng "Duyệt hoàn tiền" có đúng một ô Có. Câu của Anh Tuấn rõ ràng: "Hoàn tiền thì chỉ tôi được duyệt, nhân viên quầy không được." Điều đó sinh ra ít nhất hai yêu cầu. Một, story "Quản lý duyệt hoàn tiền" với tiêu chí chấp nhận nói rõ nhân viên quầy không thấy nút duyệt. Hai, một luồng chờ: khi sinh viên yêu cầu hoàn tiền lúc 12:00 mà Anh Tuấn đang bận, tiền nằm ở đâu, sinh viên thấy gì?
sequenceDiagram
participant SV as Sinh viên
participant Q as Nhân viên quầy
participant QL as Quản lý căng tin
SV->>Q: Báo món đã hết dù đã trả tiền
Q->>QL: Gửi yêu cầu hoàn tiền kèm mã đơn
Note over Q: Quầy không có quyền duyệt theo R6
QL->>QL: Kiểm tra đơn và thanh toán
QL-->>SV: Duyệt hoàn tiền, báo thời gian nhận
QL-->>Q: Đơn chuyển sang Đã huỷVai trò bị quên thứ nhất: giảng viên và nhân viên trường. Họ chiếm khoảng 15% doanh thu. Cột GV-NV có nhiều ô Có, nhưng ô "Đặt trước một suất" là Hỏi lại, vì mâu thuẫn C2: Chị Lan muốn đăng nhập bằng mã số sinh viên qua hệ thống của trường, còn Anh Tuấn nói thẳng "Giảng viên với nhân viên trường cũng ăn ở đây, không có mã số sinh viên đâu." Ô này chặn cả cột. Nếu không giải quyết, mọi ô Có còn lại của cột đều vô nghĩa.
Vai trò bị quên thứ hai: Phòng Quản trị – Đời sống. Nhóm thường coi Chị Lan là người tài trợ, không phải người dùng. Nhưng phòng của chị nhận khoảng 25 email phàn nàn mỗi tháng và quản lý chương trình hỗ trợ cho khoảng 300 sinh viên. Chị cần xem phản hồi mà không phải đợi Anh Tuấn chuyển (P9), và cần biết phiếu hỗ trợ được dùng bao nhiêu. Đó là ít nhất hai story báo cáo mà backlog sinh viên không bao giờ tự sinh ra.
Vai trò bị quên thứ ba: bếp. Cột Bếp có đúng một ô Có: "Xem danh sách cần nấu". Nhưng ô đó chứa cả một yêu cầu thiết kế. Cô Hạnh nói: "Giờ cao điểm cô không cầm điện thoại được, tay đâu mà xem." Vậy story không thể là "bếp xem đơn trên app". Nó phải là một màn hình cố định, chữ lớn, đọc được từ khoảng cách vài bước, không cần chạm. Và vì Cô Hạnh nấu theo mẻ từ 10:30, màn hình đó phải tổng hợp theo món chứ không chỉ liệt kê theo đơn.
Cờ đỏ. Một vai trò không có story nào là cờ đỏ, kể cả khi ma trận có ô Có cho vai trò đó. Hãy đối chiếu từng cột với backlog. Nếu cột Bếp có ô Có mà backlog không có story nào bắt đầu bằng "Là bếp trưởng…", nghĩa là nhóm đã biết nhu cầu nhưng chưa biến nó thành việc.
Lộ trình từng bước
- Kẻ bảng với sáu vai trò ở cột. Không gộp, không thêm vai trò "Admin".
- Lấy hành động từ ba nguồn: các bước trong story map, các làn trong service blueprint, và các thao tác trong ma trận CRUD ở bài 2.
- Điền từng ô bằng một trong bốn giá trị. Khi điền Không, ghi mã quy tắc nếu có.
- Đọc theo cột: vai trò nào có ít ô Có nhất? Đối chiếu với backlog để tìm vai trò không có story.
- Đọc ô Không: mỗi ô cần một tiêu chí chấp nhận dạng "vai trò X không thấy hoặc không làm được Y".
- Đọc ô Hỏi lại: gom theo người có thẩm quyền trả lời và đưa vào buổi walkthrough ở bài 6.
- Viết story mới cho vai trò bị quên, ghi rõ bằng chứng nguyên văn.
Thói quen & kỷ luật
| Thói quen | Tần suất | Kết quả mong đợi |
|---|---|---|
| Đọc ma trận theo cột trước khi đọc theo dòng | Mỗi lần rà soát | Phát hiện vai trò bị bỏ rơi |
| Gắn mã quy tắc vào mọi ô Không | Mỗi ô Không | Phân quyền có căn cứ, kiểm thử được |
| Đếm story theo vai trò | Mỗi tuần | Thấy độ lệch giữa sinh viên và hậu trường |
| Hỏi "người này làm việc này bằng tay hay bằng thiết bị gì" | Mỗi vai trò vận hành | Yêu cầu giao diện đúng với hoàn cảnh thật |
Cần luyện tập
Drill một: Thêm vào bảng ba hành động còn thiếu mà bạn tìm được từ service blueprint của Căng tin số. Gợi ý: nghĩ về món nấu quá bốn tiếng phải bỏ theo R5. Ai ghi nhận suất bỏ? Ai xem số liệu đó để giảm khoảng 40 suất bỏ đi mỗi ngày?
Drill hai: Đếm story trong backlog của nhóm theo sáu vai trò. Viết tỉ lệ ra. Nếu sinh viên chiếm hơn 70%, liệt kê ba story còn thiếu cho vai trò ít nhất.
Drill ba: Chọn ứng dụng quản lý đào tạo của trường bạn. Liệt kê ít nhất năm vai trò dùng nó. Vai trò nào bạn chưa từng nghĩ tới?
Checklist hành động tuần này
- [ ] Điền đủ ma trận sáu vai trò cho mọi hành động
- [ ] Gắn mã quy tắc cho mọi ô Không
- [ ] Viết story cho bếp, quản lý và Phòng Quản trị – Đời sống nếu còn thiếu
- [ ] Đưa ô Hỏi lại về C2 vào danh sách quyết định cần chốt
- [ ] Đối chiếu từng cột với backlog để tìm vai trò không có story
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ố vai trò có ít nhất một story, mục tiêu 6 trên 6 | Không vai trò nào bị bỏ rơi |
| Chỉ số dẫn dắt | Số ô Hỏi lại còn mở | Khối lượng quyết định chưa chốt |
| Chỉ số dẫn dắt | Tỉ lệ ô Không có mã quy tắc | Độ chắc của phân quyền |
| Chỉ số kết quả | Tỉ lệ story của vai trò không phải sinh viên | Độ cân bằng của backlog |
Dấu hiệu bạn đã thành thạo
- Bạn nhìn thấy cột Bếp trống và biết ngay phải đọc lại ghi chép Cô Hạnh.
- Bạn biến câu "chỉ tôi được duyệt" thành tiêu chí chấp nhận kiểm thử được.
- Bạn nhận ra một ô Hỏi lại có thể chặn cả một cột, như C2 chặn giảng viên.
- Bạn hỏi về hoàn cảnh dùng của từng vai trò, không chỉ về chức năng.
Cạm bẫy thường gặp
| Cạm bẫy | Biểu hiện | Cách tránh |
|---|---|---|
| Gộp vai trò cho gọn | Gộp quầy và bếp thành "nhân viên" | Giữ sáu vai trò, vì hoàn cảnh dùng khác nhau |
| Coi sponsor không phải người dùng | Không có story nào cho Chị Lan | Hỏi sponsor cần xem gì, khi nào |
| Ô Có không có story | Ma trận đẹp, backlog vẫn thiếu | Đối chiếu từng ô Có với mã story |
| Phân quyền nằm trong đầu | "Ai cũng biết quầy không được hoàn tiền" | Viết thành tiêu chí chấp nhận và ca kiểm thử |
Chốt lại
Ma trận vai trò và hành động bắt lỗ hổng theo con người. Với Căng tin số, nó lộ ra ba vai trò bị quên: giảng viên và nhân viên bị chặn bởi C2, Phòng Quản trị – Đời sống cần báo cáo, bếp cần một màn hình đọc được khi tay đang nấu. Mọi ô Không là một yêu cầu phân quyền, và mọi vai trò không có story là cờ đỏ. Bài 4 chuyển sang lỗ hổng theo tình huống: đường không vui.