Menu
ESC

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

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

Đang tải...

Hamburger Method và Spike

Chương Trình Thạo Product Owner Có Chứng Chỉ Bài 33/60

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

Trong các bài trước, bạn đã học cách chẻ nhỏ một User Story lớn thành những lát mỏng theo chiều dọc (vertical slicing). Nhưng trong thực tế làm việc, một Product Owner sẽ đụng phải hai bài toán mà chẻ dọc đơn thuần chưa giải quyết hết:

Bài toán thứ nhất: "Tôi biết phải làm gì, nhưng không biết làm tới mức nào là đủ cho Sprint này." Bạn có một story kiểu "Người dùng đăng nhập" — nhưng đăng nhập có vô số cấp độ: chỉ email/mật khẩu? Có quên mật khẩu? Có khoá tài khoản sau 5 lần sai? Có đăng nhập bằng Google? Mỗi lựa chọn lại tốn công khác nhau, và đội của bạn cứ tranh cãi mãi không chốt được phạm vi.

Bài toán thứ hai: "Tôi không biết phải làm gì, vì có một ẩn số kỹ thuật chặn đường." Đội muốn tích hợp cổng thanh toán VNPay nhưng chưa ai từng làm, không biết mất bao lâu, không biết có khả thi trong hạ tầng hiện tại không. Bạn không thể ước lượng một thứ mà bạn còn chưa hiểu.

Hai công cụ trong bài này — Hamburger MethodSpike — chính là hai con dao mổ cho hai ca bệnh đó. Hamburger Method (do Gojko Adzic phổ biến) giúp bạn và đội thống nhất độ sâu của một story, biến cuộc tranh cãi "làm tới đâu" thành một bản đồ lựa chọn rõ ràng. Spike thì giúp bạn mua thông tin để xoá bỏ bất định trước khi cam kết. Một PO giỏi không chỉ biết cái gì cần làm, mà còn biết làm tới mức nàokhi nào cần dừng lại để học. Đó chính là nội dung của bài hôm nay.

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

Hamburger Method là gì

Hãy tưởng tượng một chiếc bánh hamburger nằm ngang. Mỗi lớp (layer) của bánh là một bước trong quy trình mà tính năng phải đi qua. Còn độ dày của mỗi lớp thể hiện bạn có thể làm bước đó tốt tới mức nào — từ đơn giản tối thiểu cho tới cầu kỳ hoàn hảo.

Ý tưởng then chốt: thay vì chẻ một story thành nhiều story con (cắt theo chiều dọc, mỗi miếng là một bánh nhỏ riêng), Hamburger Method giúp bạn giữ nguyên một chiếc bánh nhưng quyết định độ dày từng lớp. Bạn vẫn giao một tính năng đi xuyên suốt toàn bộ quy trình (đầu-cuối), nhưng ở phiên bản mỏng nhất có thể vẫn dùng được. Đây là kỹ thuật bổ trợ cho Story Splitting, không thay thế nó.

Lý do nó hiệu quả về mặt tâm lý nhóm: con người rất khó đồng ý "bỏ bớt tính năng" vì nghe như thua thiệt. Nhưng nếu bạn trình bày mọi lựa chọn từ thấp đến cao cho từng lớp, đội sẽ thấy rõ rằng họ không hề bỏ tính năng — họ đang chọn cấp độ phù hợp cho mỗi lớp. Cuộc trò chuyện chuyển từ "có/không" sang "mức nào", và đó là cuộc trò chuyện dễ chốt hơn rất nhiều.

Ba bước của Hamburger Method

Bước 1 — Liệt kê các lớp (layers). Lớp ở đây chính là các bước trong quy trình mà người dùng hoặc hệ thống đi qua để hoàn thành tính năng. Ví dụ với "tìm kiếm sản phẩm": nhập từ khoá → xử lý truy vấn → trả kết quả → hiển thị → lọc/sắp xếp. Mỗi bước là một lớp bánh.

Bước 2 — Với mỗi lớp, liệt kê các lựa chọn theo độ phức tạp tăng dần. Ví dụ lớp "xử lý truy vấn" có thể là: khớp chính xác (exact match) → khớp gần đúng (LIKE %...%) → tìm kiếm full-text → tìm kiếm có gợi ý sửa lỗi chính tả → tìm kiếm ngữ nghĩa bằng AI. Mỗi mức tốn công nhiều hơn mức trước.

Bước 3 — Vẽ "đường cắt" (the bite line) qua mỗi lớp để chốt phạm vi miếng đầu tiên. Cả đội cùng nhìn vào bảng và thống nhất: lớp này lấy mức tối thiểu, lớp kia chịu khó đầu tư hơn một chút vì đó là điểm khác biệt cốt lõi. Những gì nằm dưới đường cắt là phạm vi Sprint này; những gì nằm trên là backlog cho sau. Bạn vừa tạo ra một tính năng đầu-cuối có thể dùng được, vừa có lộ trình rõ ràng để nâng cấp dần.

Spike là gì

Spike là một item đặc biệt trong Product Backlog mà kết quả đầu ra là kiến thức, không phải tính năng có thể giao cho người dùng. Khái niệm này đến từ Extreme Programming (XP), nhưng được dùng rộng rãi trong mọi đội Scrum.

Một Spike được tạo ra khi đội đối mặt với bất định (uncertainty) đủ lớn khiến họ không thể ước lượng hay không thể bắt đầu một cách tự tin. Mục tiêu của Spike là mua thông tin để giảm rủi ro. Có hai loại chính:

  • Technical Spike: trả lời câu hỏi kỹ thuật. "Thư viện X có chạy được trên hạ tầng của ta không?", "Tích hợp VNPay mất bao lâu, cần những gì?", "Cách nào nhanh hơn để render báo cáo 100.000 dòng?"
  • Functional Spike: trả lời câu hỏi về hành vi/nhu cầu người dùng. Thường gắn với prototype, A/B nhỏ, hoặc phỏng vấn để xem cách tiếp cận nào người dùng chấp nhận.
Ba nguyên tắc sống còn của một Spike chuyên nghiệp:

  • Time-boxed (đóng hộp thời gian): một Spike bắt buộc có giới hạn thời gian cố định, ví dụ "tối đa 2 ngày". Hết thời gian là dừng, bất kể đã tìm ra câu trả lời hay chưa — vì ngay cả "chưa rõ" cũng là một thông tin có giá trị.
  • Có câu hỏi rõ ràng và tiêu chí kết thúc: Spike phải nêu chính xác câu hỏi cần trả lờibằng chứng nào thì coi là xong. Không có câu hỏi rõ ràng thì Spike sẽ biến thành "nghịch ngợm vô tận".
  • Kết quả là quyết định, không phải code production: đầu ra của Spike là một khuyến nghị, một bản ước lượng đáng tin hơn, một proof-of-concept dùng một lần (throwaway). Đừng kỳ vọng code Spike đi thẳng vào sản phẩm.

Vai trò của Product Owner

Ở đây có một ranh giới mà PO cần tôn trọng. Spike thường là quyết định mang tính kỹ thuật của Developers — họ biết rõ chỗ nào mù mờ. Vai trò của PO không phải ra lệnh "hãy spike cái này", mà là: (1) đảm bảo Spike có câu hỏi gắn với giá trị kinh doanh để không lãng phí, (2) đặt time-box hợp lý cân bằng giữa học hỏi và giao hàng, (3) ưu tiên (order) Spike trong backlog đúng lúc — đủ sớm để giảm rủi ro, nhưng không spike những thứ chưa cần. Với Hamburger Method thì ngược lại: PO thường là người chủ trì workshop, vì đây là công cụ quản lý phạm vi và giá trị — đúng địa hạt của PO.

Tình huống thực tế

Ví dụ 1 — Tiki và tính năng "Theo dõi đơn hàng" (Hamburger Method)

Giả định một đội tại một sàn thương mại điện tử kiểu Tiki nhận yêu cầu: "Cho người mua theo dõi tình trạng đơn hàng theo thời gian thực." Trong buổi refinement, đội tranh cãi gay gắt suốt 40 phút: bộ phận vận hành muốn bản đồ GPS shipper di chuyển trực tiếp; đội kỹ thuật nói cái đó tốn 6 tuần và phụ thuộc API của đối tác giao vận; PO thì sốt ruột vì cần ra mắt trong Sprint tới để kịp đợt khuyến mãi.

PO áp dụng Hamburger Method. Bước 1, liệt kê các lớp: (a) Nguồn dữ liệu trạng thái → (b) Tần suất cập nhật → (c) Cách hiển thị cho người mua → (d) Thông báo.

Bước 2, với mỗi lớp liệt kê lựa chọn theo độ phức tạp:

  • Nguồn dữ liệu: trạng thái thủ công do CS nhập → webhook từ đối tác giao vận → GPS thời gian thực.
  • Tần suất: cập nhật khi người dùng bấm refresh → polling mỗi 5 phút → realtime qua WebSocket.
  • Hiển thị: dòng chữ trạng thái → thanh tiến trình 4 mốc → bản đồ GPS.
  • Thông báo: không có → email khi đổi trạng thái → push notification.
Bước 3, cả đội vẽ đường cắt: nguồn dữ liệu lấy webhook từ đối tác (đã có sẵn), tần suất polling 5 phút, hiển thị thanh tiến trình 4 mốc, thông báo email. Kết quả: một tính năng đầu-cuối hoàn chỉnh, người mua thực sự theo dõi được đơn, ra mắt trong 1 Sprid thay vì 6 tuần. Bản đồ GPS realtime được đưa lên backlog cho quý sau.

Bài học: Hamburger Method biến cuộc cãi vã "GPS hay không GPS" thành cuộc đồng thuận "lớp nào lấy mức nào". Tính năng vẫn đi xuyên suốt quy trình, vẫn có giá trị thật, mà chi phí giảm tới gần 80%.

Ví dụ 2 — Một startup fintech ở TP.HCM tích hợp VNPay (Technical Spike)

Một startup fintech khoảng 25 người ở TP.HCM muốn thêm thanh toán qua VNPay. Đội ước lượng ban đầu phân tán kinh khủng: người nói 3 ngày, người nói 3 tuần. Lý do là chưa ai từng tích hợp VNPay, không rõ tài liệu sandbox, không rõ cơ chế đối soát (reconciliation) và xử lý callback.

Thay vì cố nhồi cả story tích hợp vào Sprint với một con số ước lượng bịa, PO và đội thống nhất tạo một Technical Spike với phát biểu rõ ràng: "Trong tối đa 2 ngày, trả lời: VNPay sandbox tích hợp được với kiến trúc thanh toán hiện tại không, cần những bước nào, rủi ro lớn nhất ở đâu, và ước lượng công sức cho story thật là bao nhiêu?" Tiêu chí kết thúc: một bản ghi chú một trang + một demo gọi được API sandbox tạo giao dịch thử thành công.

Sau 2 ngày, đội phát hiện cơ chế callback IPN (Instant Payment Notification) của VNPay yêu cầu server có IP cố định và endpoint công khai — điều mà hạ tầng serverless hiện tại của họ không hỗ trợ sẵn. Đây là rủi ro mà nếu không spike, đội đã vấp phải giữa Sprint và trễ hạn. Nhờ Spike, story tích hợp thật được ước lượng lại chính xác (8 điểm thay vì "không biết"), kèm một story phụ về dựng endpoint IPN.

Bài học: Spike không tạo ra tính năng, nhưng nó tạo ra sự chắc chắn. Hai ngày "phí" cho Spike đã cứu đội khỏi việc cam kết một Sprint Goal bất khả thi. Quan trọng là time-box được giữ nghiêm: kể cả khi chưa demo thành công, phát hiện về IPN cũng đã đủ giá trị để dừng.

Ví dụ 3 — Đội nội dung học trực tuyến và "Spike trá hình" (bài học phản diện)

Một đội làm nền tảng học trực tuyến tạo một item: "Nghiên cứu cải thiện tốc độ tải trang." Nghe có vẻ là Spike. Nhưng nó không có time-box, không có câu hỏi cụ thể, không có tiêu chí xong. Một developer lao vào "nghiên cứu" suốt 9 ngày, đụng đâu sửa đó, refactor lung tung, và cuối Sprint không ai trả lời được "vậy rốt cuộc trang nhanh hơn bao nhiêu, và bước tiếp theo là gì?".

PO sau đó sửa lại thành Spike đúng chuẩn: "Tối đa 1 ngày: xác định 3 nguyên nhân gây tải chậm nhất trên trang khoá học bằng Lighthouse + APM, ước lượng tác động từng cái." Kết quả: trong 1 ngày, đội biết 70% độ chậm đến từ ảnh không nén và một truy vấn N+1. Hai story cải thiện cụ thể, đo lường được, ra đời.

Bài học: "Nghiên cứu" mà không có câu hỏi và không có hộp thời gian thì không phải Spike — đó là cái hố không đáy nuốt mất thời gian của đội. PO phải là người gác cổng cho tính kỷ luật này.

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

Khi nào chọn Hamburger Method: khi story đã rõ về mặt khái niệm nhưng đội bất đồng về phạm vi/độ sâu, hoặc story quá to và bạn muốn tìm phiên bản tối thiểu vẫn đi đầu-cuối.

  • Viết tên story lên đầu bảng (giấy A0 hoặc Miro/FigJam).
  • Cùng đội liệt kê các lớp — các bước quy trình mà tính năng đi qua. Giữ ở mức 3–6 lớp; quá nhiều sẽ rối.
  • Với mỗi lớp, brainstorm các lựa chọn từ đơn giản nhất (góc dưới) đến cầu kỳ nhất (góc trên). Khuyến khích mọi người đề xuất tự do.
  • Sắp xếp các lựa chọn trong mỗi lớp theo thứ tự độ phức tạp/công sức tăng dần.
  • Cả đội cùng vẽ "đường cắt" — chọn mức cho từng lớp sao cho tổng thể vừa khả thi trong Sprint vừa tạo ra giá trị thật, đầu-cuối. PO bảo vệ góc nhìn giá trị, Developers bảo vệ góc nhìn khả thi.
  • Chốt phần dưới đường cắt thành story sẵn sàng làm; đẩy phần trên thành các item backlog để nâng cấp sau.
Khi nào chọn Spike: khi đội không thể ước lượng hoặc không thể bắt đầu vì còn ẩn số kỹ thuật/nhu cầu.

  • Viết câu hỏi cần trả lời thật cụ thể, gắn với một quyết định kinh doanh hoặc kỹ thuật.
  • Định nghĩa tiêu chí kết thúc — bằng chứng nào thì coi là đã có câu trả lời (một ghi chú, một demo, một con số ước lượng).
  • Đặt time-box cứng (vài giờ đến tối đa 2–3 ngày). PO cân nhắc đánh đổi học hỏi vs giao hàng.
  • Đưa Spike vào backlog và order đúng lúc — ngay trước story phụ thuộc vào nó.
  • Khi Spike xong, mang kết quả ra để tinh chỉnh ước lượng, chẻ story, hoặc quyết định không làm. Sau đó huỷ mọi code throwaway.

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

  • Nhầm Hamburger với Story Splitting. Hamburger giúp chọn độ sâu của một bánh đầu-cuối; Splitting chẻ ra nhiều bánh nhỏ độc lập. Hai kỹ thuật bổ trợ nhau — thường dùng Hamburger để tìm lát mỏng nhất rồi mới Split nếu vẫn quá to.
  • Đường cắt mỏng đến mức vô dụng. Nếu cắt quá thấp ở mọi lớp, bạn có thể tạo ra thứ chạy được nhưng không ai dùng. Hãy giữ ít nhất một lớp "khác biệt cốt lõi" ở mức đủ tốt.
  • Spike không có time-box. Đây là lỗi giết chết Sprint. Không time-box thì không phải Spike. Luôn viết "tối đa N giờ/ngày".
  • Spike không có câu hỏi. "Nghiên cứu X" mà không nêu câu hỏi và tiêu chí xong sẽ thành cái hố. Một Spike tốt luôn trả lời được "có/không" hoặc "cách nào" sau khi kết thúc.
  • Lạm dụng Spike để né cam kết. Nếu đội spike mọi thứ, đó là dấu hiệu sợ rủi ro quá mức hoặc backlog mơ hồ. Chỉ spike khi bất định thật sự chặn đường.
  • Mẹo: ghi rõ trong Definition of Ready rằng "story có ẩn số kỹ thuật lớn thì cần Spike trước". Và quy ước rằng kết quả Spike luôn được trình bày trong refinement hoặc Sprint Review để cả đội cùng học.
  • Mẹo: với Hamburger, chụp ảnh bảng và lưu lại — những lựa chọn "phía trên đường cắt" chính là nguồn ý tưởng nâng cấp tự nhiên cho các Sprint sau.

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

Bài 1 — Hamburger Method: Lấy story "Người dùng đặt lại mật khẩu qua email". Tự liệt kê ít nhất 4 lớp quy trình, mỗi lớp 3 lựa chọn theo độ phức tạp tăng dần. Sau đó vẽ đường cắt cho một phiên bản đầu-cuối có thể giao trong 1 Sprint, và giải thích vì sao bạn chọn mức đó cho từng lớp.

Bài 2 — Spike: Đội của bạn muốn thêm tính năng "xuất báo cáo doanh thu ra Excel cho 200.000 dòng dữ liệu" nhưng lo về hiệu năng. Hãy viết một phát biểu Spike hoàn chỉnh gồm: câu hỏi cần trả lời, tiêu chí kết thúc, và time-box. Đảm bảo câu hỏi gắn với một quyết định cụ thể.

Bài 3 — Phân biệt: Cho 4 tình huống sau, tình huống nào nên dùng Hamburger, nào nên dùng Spike, nào cần cả hai? (a) Story rõ ràng nhưng đội cãi nhau về phạm vi; (b) Tích hợp một SDK chưa ai từng dùng; (c) Tính năng to và phụ thuộc một công nghệ mới lạ; (d) Tính năng nhỏ, quen thuộc, ai cũng đồng ý phạm vi. Giải thích lựa chọn của bạn.

Tóm tắt

Hamburger Method và Spike là hai công cụ giải quyết hai loại bất định khác nhau của một Product Owner. Hamburger Method xử lý bất định về phạm vi: bằng cách liệt kê các lớp quy trình, các lựa chọn theo độ phức tạp, rồi vẽ đường cắt, bạn biến cuộc tranh cãi "làm hay không làm" thành sự đồng thuận "lớp nào lấy mức nào", tạo ra một tính năng đầu-cuối mỏng nhất mà vẫn dùng được. Spike xử lý bất định về kiến thức: một item time-boxed, có câu hỏi rõ ràng và tiêu chí kết thúc, đầu ra là quyết định chứ không phải tính năng — giúp đội mua sự chắc chắn trước khi cam kết.

Điểm mấu chốt cho PO: Hamburger là công cụ bạn chủ trì để bảo vệ giá trị và phạm vi; Spike là công cụ bạn hỗ trợ và gác cổng kỷ luật (time-box, câu hỏi gắn giá trị, order đúng lúc). Dùng đúng hai con dao này, bạn sẽ ít khi rơi vào cảnh cam kết một Sprint Goal mà chính mình cũng không tin là khả thi.