Menu
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Đang tải...

Bài 30 — Decomposing Epics → Stories → Tasks

Kiến Thức Cơ Bản Scrum Product Owner Bài 30/60

Mở đầu — vì sao bài này quan trọng

Hãy tưởng tượng bạn là Product Owner và sếp vừa giao cho bạn một mục tiêu lớn: "Quý này phải ra mắt tính năng thanh toán trả góp cho ứng dụng mua sắm." Nghe thì rõ ràng, nhưng khi ngồi vào Sprint Planning, cả đội ngắc ngứ. Tính năng này quá lớn — không thể nhét vào một Sprint hai tuần, không ai dám ước lượng, và Developers không biết bắt đầu từ đâu. Đây chính xác là tình huống mà kỹ năng decomposition (phân rã công việc) cứu bạn.

Decomposition là nghệ thuật chia một khối công việc khổng lồ thành những mảnh nhỏ vừa miệng để đội Scrum "ăn" được trong từng Sprint. Nếu Product Backlog là kho lương thực của sản phẩm, thì decomposition là việc bạn thái thực phẩm thành từng miếng vừa ăn, nấu chín, dọn ra bàn. Một PO không biết phân rã sẽ luôn ôm những "tảng đá" công việc mà đội không bao giờ nuốt nổi — dẫn đến Sprint trượt mục tiêu, velocity thất thường, và stakeholder mất niềm tin.

Trong bài này, chúng ta sẽ đi sâu vào ba tầng phân cấp kinh điển: Epic → Story → Task. Bạn sẽ học cách nhận biết khi nào một thứ là Epic, khi nào nó đã đủ nhỏ để thành Story, và ranh giới giữa Story (việc của PO và đội) với Task (việc của Developers). Tôi sẽ không chỉ giảng lý thuyết mà còn dẫn bạn qua những ví dụ thật, kèm con số cụ thể, để bạn về áp dụng được ngay vào Sprint kế tiếp.

Khái niệm cốt lõi

Ba tầng phân cấp: Epic, Story, Task

Hãy hình dung một kim tự tháp ba tầng, đo bằng đơn vị thời gian:

  • Epic — một khối công việc lớn, thường mất vài tuần đến vài tháng để hoàn thành. Epic mô tả một mục tiêu nghiệp vụ ở mức cao, ví dụ "Hệ thống thanh toán trả góp" hay "Trải nghiệm onboarding cho người dùng mới". Epic quá lớn để vừa một Sprint, nên nó luôn cần được chẻ nhỏ trước khi đội bắt tay vào làm.
  • Story (User Story) — một phần giá trị có thể giao được, hoàn thành trong một Sprint, thường tính bằng vài ngày. Story luôn mang giá trị nhìn thấy được với người dùng hoặc nghiệp vụ. Đây là đơn vị mà PO ưu tiên trên Backlog và đội cam kết trong Sprint.
  • Task — một đầu việc kỹ thuật cụ thể, hành động được, đo bằng giờ (thường dưới một ngày). Task là cách Developers chia nhỏ một Story để thực thi: "Tạo bảng database", "Viết API endpoint", "Thêm validation cho form". Task thuộc về Developers, không phải PO.
Một quy tắc ghi nhớ đơn giản: Epic đo bằng tháng, Story đo bằng ngày, Task đo bằng giờ. Khi bạn không chắc một mục thuộc tầng nào, hãy hỏi: "Nó mất bao lâu để xong?"

Vì sao phải có ba tầng, không phải một?

Nhiều PO mới hỏi: tại sao không viết thẳng mọi thứ thành Story? Lý do là mức độ chi tiết cần khác nhau ở từng giai đoạn. Công việc còn xa (vài tháng nữa mới làm) thì không đáng để ngồi viết chi tiết — vì yêu cầu sẽ thay đổi, viết kỹ chỉ phí công. Để nó ở dạng Epic, mô tả mức cao là đủ. Càng tới gần lúc làm, bạn càng chẻ Epic thành Story cụ thể (đây là việc của backlog refinement). Khi vào Sprint, Developers mới chẻ Story thành Task.

Đây là nguyên lý progressive elaboration (làm rõ dần dần): chi tiết hóa đúng lúc, không sớm hơn cần thiết. Một Backlog khỏe mạnh trông giống hình kim tự tháp — vài Story trên cùng đã rõ ràng, sẵn sàng cho 1-2 Sprint tới; bên dưới là các Epic còn thô, chờ được chẻ khi đến gần.

Tiêu chí một Story tốt: INVEST

Khi chẻ Epic ra Story, làm sao biết Story đã "đủ chuẩn"? Dùng bộ tiêu chí INVEST:

  • Independent — độc lập, ít phụ thuộc story khác.
  • Negotiable — có thể thương lượng phạm vi, không phải hợp đồng cứng.
  • Valuable — mang giá trị rõ ràng cho người dùng/nghiệp vụ.
  • Estimable — đội ước lượng được công sức.
  • Small — đủ nhỏ để xong trong một Sprint.
  • Testable — có tiêu chí chấp nhận (acceptance criteria) để kiểm thử.
Nếu một "Story" của bạn vi phạm chữ S (quá lớn, không xong trong Sprint) hoặc chữ E (đội không ước lượng nổi), đó là dấu hiệu nó vẫn là Epic trá hình, cần chẻ tiếp.

Các kỹ thuật chẻ Story (story splitting)

Khi một Story còn quá to, bạn không chẻ bừa mà theo các "đường cắt" có ý nghĩa. Vài đường cắt phổ biến:

  • Theo bước trong quy trình (workflow steps): "Đặt hàng" → "Thêm vào giỏ", "Nhập địa chỉ", "Chọn thanh toán", "Xác nhận".
  • Theo loại dữ liệu / biến thể (variations): "Thanh toán" → "qua thẻ", "qua ví MoMo", "qua chuyển khoản".
  • Theo quy tắc nghiệp vụ (business rules): "Tính giá" → "giá cơ bản", "áp mã giảm giá", "tính phí ship".
  • Theo happy path vs edge case: làm luồng chính trước, xử lý lỗi/ngoại lệ sau.
  • Theo thao tác CRUD: "Quản lý sản phẩm" → "Thêm", "Sửa", "Xóa", "Xem".
Nguyên tắc vàng: mỗi miếng chẻ ra vẫn phải giao được giá trị độc lập, dù nhỏ. Đừng chẻ theo tầng kỹ thuật ("làm xong database", "làm xong UI") vì khi đó không miếng nào dùng được một mình.

Tình huống thực tế

Ví dụ 1 — Tiki và Epic "Thanh toán trả góp"

Một đội product tại một sàn TMĐT (lấy bối cảnh tương tự Tiki) nhận Epic: "Cho phép khách trả góp 0% qua thẻ tín dụng". Ước lượng thô khoảng 3 tháng. Rõ ràng không nhét được vào Sprint hai tuần.

PO cùng đội ngồi refinement và chẻ Epic theo biến thể nhà cung cấp và theo quy trình:

  • Story 1: Hiển thị tùy chọn "trả góp" trên trang chi tiết sản phẩm (chỉ với đơn hàng > 3 triệu).
  • Story 2: Tích hợp cổng trả góp của ngân hàng A cho luồng happy path.
  • Story 3: Xử lý trường hợp thẻ bị từ chối / quá hạn mức.
  • Story 4: Gửi email xác nhận lịch trả góp cho khách.
  • Story 5: Trang admin xem danh sách đơn trả góp.
Năm Story này trải qua khoảng 2-3 Sprint. Trong Sprint Planning, Developers lại chẻ Story 2 thành Task: "Gọi API sandbox ngân hàng", "Map mã lỗi", "Lưu trạng thái giao dịch vào DB", "Viết unit test cho luồng thành công" — mỗi Task vài giờ.

Bài học: Epic được chẻ theo đường cắt nghiệp vụ (biến thể, quy trình, edge case), còn Task do đội tự chẻ theo kỹ thuật. PO dừng ở mức Story; đừng giành chẻ Task hộ Developers.

Ví dụ 2 — Startup SaaS giáo dục và cái bẫy "Story khổng lồ"

Một startup SaaS dạy học trực tuyến (giả định, đội 6 người, velocity trung bình 28 điểm/Sprint) đưa vào Backlog một "Story": "Xây dựng hệ thống livestream lớp học" và gắn cho nó 40 story point. Sprint đầu họ kéo Story này vào, làm hết hai tuần, đến Sprint Review thì... chưa có gì demo được — backend stream xong nhưng chưa nối với UI, chưa test được.

Sai lầm: 40 điểm cho một Story là dấu hiệu rõ ràng nó là Epic. Nó vi phạm chữ S (Small) và T (Testable) của INVEST. Sau retrospective, PO chẻ lại:

  • "Giảng viên bật/tắt camera và mic" (8 điểm)
  • "Học viên xem được luồng video một chiều" (8 điểm)
  • "Khung chat realtime song song livestream" (5 điểm)
  • "Ghi lại buổi học để xem lại" (8 điểm)
  • "Hiển thị số người đang xem" (3 điểm)
Sprint kế tiếp đội giao được hai Story đầu, demo được luồng "giảng viên phát — học viên xem" hoàn chỉnh. Stakeholder thấy tiến độ thật, niềm tin quay lại.

Bài học: Story point cao bất thường (trên ~13, hoặc lớn hơn nửa velocity của đội) là cờ đỏ cảnh báo bạn đang ôm một Epic ngụy trang. Chẻ cho tới khi mỗi miếng giao được giá trị nhìn thấy.

Ví dụ 3 — Đội nội bộ ngân hàng và đường cắt "happy path trước"

Một đội xây cổng nội bộ cho nhân viên ngân hàng nhận Epic "Quy trình duyệt khoản vay". Áp lực ra mắt gấp trong 5 tuần. Thay vì làm trọn vẹn mọi nhánh, PO áp dụng đường cắt happy path vs edge case:

  • Sprint 1-2: Luồng duyệt chuẩn cho hồ sơ hợp lệ, đầy đủ giấy tờ (happy path).
  • Sprint 3: Các nhánh ngoại lệ — hồ sơ thiếu giấy tờ, vượt hạn mức, cần phê duyệt cấp 2.
Nhờ vậy, sau Sprint 2 họ đã có một sản phẩm chạy được cho 80% hồ sơ thực tế, đem demo cho lãnh đạo và bắt đầu thu phản hồi sớm, thay vì đợi đủ 5 tuần mới có thứ để xem.

Bài học: Không phải lúc nào cũng chẻ theo tính năng. Chẻ theo "làm phần lõi giá trị cao trước, phần biên sau" giúp giao giá trị sớm và giảm rủi ro.

Hướng dẫn từng bước

Đây là quy trình bạn có thể mang vào buổi refinement tuần này:

  • Xác định Epic và mục tiêu nghiệp vụ. Viết một câu mô tả Epic mang giá trị: "Là [ai], tôi muốn [gì], để [đạt được gì]". Nếu chưa rõ giá trị, đừng vội chẻ — làm rõ mục tiêu trước.
  • Đánh giá kích thước. Hỏi đội: "Cái này xong trong một Sprint được không?" Nếu rõ ràng không, nó là Epic và cần chẻ. Nếu lăn tăn, cứ coi như cần chẻ.
  • Chọn đường cắt phù hợp. Lần lượt thử các đường cắt: quy trình, biến thể, quy tắc nghiệp vụ, happy path/edge case, CRUD. Chọn đường nào cho ra các miếng đều giao được giá trị độc lập.
  • Viết từng Story theo INVEST. Mỗi Story phải có acceptance criteria rõ ràng (điều kiện để coi là "xong"). Đây là chữ T — Testable — không thể thiếu.
  • Kiểm tra lại bằng câu hỏi "demo được không?" Với mỗi Story, tự hỏi: cuối Sprint tôi có thể đứng trước stakeholder và demo nó như một phần giá trị hoàn chỉnh không? Nếu câu trả lời là "chưa, vì còn dở dang", chẻ chưa đúng — bạn đang chẻ theo tầng kỹ thuật.
  • Ưu tiên (prioritize) các Story. Sau khi chẻ, sắp xếp Story trên Backlog theo giá trị và rủi ro. Không phải mọi Story con của một Epic đều cần làm ngay; có thể chỉ lấy 2-3 Story giá trị cao nhất vào Sprint tới.
  • Để Developers chẻ Task khi vào Sprint Planning. PO dừng tay ở mức Story. Trong Sprint Planning, đội tự bóc mỗi Story thành các Task vài giờ. Bạn có mặt để giải đáp, không phải để áp đặt cách họ làm.

Lỗi thường gặp & mẹo

Lỗi 1 — Chẻ Story theo tầng kỹ thuật. Đây là lỗi phổ biến nhất: "Story làm database", "Story làm API", "Story làm UI". Vấn đề: không Story nào giao được giá trị một mình; đến Sprint Review chẳng có gì demo. Mẹo: mỗi Story phải xuyên suốt từ trên xuống dưới (vertical slice) — chạm một chút database, một chút logic, một chút UI, nhưng làm được một việc hoàn chỉnh dù nhỏ.

Lỗi 2 — PO giành chẻ Task. Một số PO viết sẵn cả Task chi tiết và bắt Developers theo. Điều này lấn vai trò của đội và làm họ mất quyền tự chủ. Mẹo: Bạn sở hữu "cái gì" và "tại sao" (Story, giá trị); Developers sở hữu "làm thế nào" (Task).

Lỗi 3 — Để Story khổng lồ trôi vào Sprint. Story 20+ điểm gần như chắc chắn trượt. Mẹo: Đặt một ngưỡng mềm — ví dụ "Story nào trên 8 điểm phải xem lại có nên chẻ không" — và biến nó thành thói quen trong refinement.

Lỗi 4 — Chẻ quá vụn. Ngược lại, chẻ thành 20 Story tí hon mỗi cái 1 điểm cũng gây overhead quản lý và mất bức tranh tổng thể. Mẹo: Story lý tưởng nằm trong khoảng vài ngày công; đừng chẻ nhỏ hơn mức cần thiết để vừa một Sprint.

Lỗi 5 — Quên giữ đường liên kết về Epic. Khi chẻ xong, các Story dễ "mồ côi", mất dấu vết về mục tiêu gốc. Mẹo: Trong Jira/Linear, luôn link Story về Epic cha để theo dõi tiến độ tổng thể của mục tiêu nghiệp vụ.

Mẹo tổng quát: Khi bí, hỏi ba câu — "Nó xong trong một Sprint chứ?" (kiểm tra Small), "Cuối Sprint demo được chứ?" (kiểm tra Valuable + Testable), "Đội ước lượng được chứ?" (kiểm tra Estimable). Ba câu này lọc ra phần lớn vấn đề decomposition.

Bài tập thực hành

Hãy lấy giấy bút (hoặc mở một bảng Jira/Trello) và làm bài tập sau:

Bài 1 — Phân loại. Cho các mục dưới đây, xác định mỗi mục là Epic, Story hay Task:

  • a) "Tạo bảng orders trong database"
  • b) "Hệ thống quản lý khách hàng thân thiết"
  • c) "Khách hàng nhập mã giảm giá khi thanh toán và thấy giá mới"
  • d) "Viết unit test cho hàm tính phí ship"
(Gợi ý đáp án: a-Task, b-Epic, c-Story, d-Task)

Bài 2 — Chẻ Epic. Cho Epic: "Tính năng tìm kiếm sản phẩm cho ứng dụng giao đồ ăn" (bối cảnh tương tự ShopeeFood/GrabFood). Hãy chẻ thành tối thiểu 5 Story theo INVEST. Với mỗi Story, ghi rõ một đường cắt bạn đã dùng (quy trình / biến thể / quy tắc / happy path) và một câu acceptance criteria.

Bài 3 — Soi lỗi. Một đồng nghiệp viết các "Story" sau cho Epic "Đăng nhập":

  • "Làm xong toàn bộ backend đăng nhập"
  • "Làm xong toàn bộ giao diện đăng nhập"
Hãy chỉ ra lỗi và viết lại thành các Story vertical slice đúng chuẩn (gợi ý: chẻ theo phương thức đăng nhập — email/mật khẩu, Google, OTP qua SMS...).

Bài 4 — Áp dụng thật. Lấy một Epic có thật trong Backlog dự án của bạn (hoặc một dự án bạn từng làm). Áp dụng quy trình 7 bước ở trên để chẻ nó. Tự chấm: có Story nào trên 13 điểm không? Có Story nào không demo được độc lập không? Sửa lại cho đạt.

Tóm tắt

Decomposition — phân rã công việc — là một trong những kỹ năng nền tảng quyết định việc một Product Owner có giúp đội giao hàng đều đặn hay không. Những điểm cốt lõi cần khắc ghi:

  • Ba tầng phân cấp: Epic (đo bằng tháng) → Story (đo bằng ngày, xong trong một Sprint) → Task (đo bằng giờ, do Developers chẻ).
  • Progressive elaboration: chỉ chi tiết hóa khi tới gần lúc làm; công việc xa cứ để dạng Epic thô.
  • INVEST là bộ tiêu chí kiểm tra một Story đã đủ tốt chưa; vi phạm chữ S (Small) hay E (Estimable) nghĩa là nó vẫn là Epic.
  • Chẻ theo đường cắt nghiệp vụ (quy trình, biến thể, quy tắc, happy path), tạo các vertical slice giao được giá trị độc lập — tuyệt đối tránh chẻ theo tầng kỹ thuật.
  • Ranh giới vai trò: PO sở hữu Story và "tại sao"; Developers sở hữu Task và "làm thế nào".
  • Khi bí, dùng ba câu hỏi vàng: xong trong một Sprint chứ? Demo được chứ? Ước lượng được chứ?
Nắm vững decomposition, bạn sẽ thấy Sprint Planning nhẹ nhàng hơn hẳn, velocity ổn định hơn, và mỗi Sprint Review luôn có thứ thật để demo. Đó là dấu hiệu của một PO đang dẫn dắt đội đi đúng nhịp.