Đánh giá mức sẵn sàng làm Business Analyst
Chấm từng chiều kỹ năng và cho ra hồ sơ — biết mình đứng ở đâu trước.
Làm bài này
Product Management
Không track = không bao giờ có số — và đây là kỹ năng duy nhất mà sai lầm không sửa được bằng cách làm lại.
Đăng nhập để đánh dấu kỹ năng và theo dõi tiến độ.
Làm bài Đánh giá Nền tảng Kỹ thuật cho PM/BA — 3 người đã làm. Một lần làm chấm điểm cho tất cả kỹ năng trong nhóm Technical Basics, không chỉ kỹ năng này.
Làm bài đánh giáHành động chỉ đo được nếu nó bắn một event kèm properties (màn hình, sản phẩm, giá trị) — không track = không bao giờ có số.
Suy ra danh sách tracking từ những câu hỏi sẽ phải trả lời sau launch; review tracking plan trước khi dev code; giữ tracking trong ticket từ ngày đầu — event không đo ngược quá khứ.
Hệ thống không tự biết người dùng vừa làm gì. Nó chỉ ghi lại đúng những gì có người viết code ra để ghi. Một cú bấm nút mà không có dòng lệnh "gửi event" đi kèm thì không để lại dấu vết ở bất kỳ đâu — không trong database, không trong log, không trong công cụ analytics.
Một event gồm hai phần:
add_to_cart, order_placed.product_id, price, source_screen, city.Hệ quả quan trọng nhất với BA/PO: event không đo ngược được quá khứ. Mọi thứ khác trong khung kỹ thuật này đều sửa được — cache sai thì xoá cache, job hỏng thì chạy lại, API chậm thì tối ưu. Riêng tracking thiếu thì thứ duy nhất mua lại được dữ liệu là thời gian: bạn sửa hôm nay và bắt đầu có số từ hôm nay.
| Khái niệm | Nghĩa là gì | Dấu hiệu bạn đã hiểu |
|---|---|---|
| Event | Một chuyện đã xảy ra, có tên, gửi lên đúng lúc nó xảy ra. | Bạn đặt tên theo sự kiện nghiệp vụ, không theo màu nút. |
| Property | Thông tin đi kèm event: sản phẩm nào, giá bao nhiêu, từ màn hình nào. | Bạn biết mỗi property tương ứng với một câu hỏi sẽ được hỏi sau này. |
| Tracking plan | Bảng liệt kê event và property cần có, viết trước khi code. | Bạn viết nó từ câu hỏi đi ngược lại, không từ giao diện đi ra. |
| Property mặc định | Bộ property gắn tự động vào mọi event (nền tảng, phiên bản, khu vực). | Bạn quyết định bộ này một lần cho cả sản phẩm. |
| Định danh người dùng | Cách nối các event của cùng một người trước và sau khi đăng nhập. | Bạn hỏi về nó trước khi tin vào bất kỳ con số "số người" nào. |
| Số lần và số người | Hai cách đếm khác nhau trên cùng một event. | Bạn luôn nói rõ mình đang đọc cái nào. |
| Dữ liệu hồi tố | Việc tính lại số cho quá khứ. | Bạn biết với event thì điều này không tồn tại. |
Tình huống: bạn vừa cho lên nút "Thêm vào giỏ" ở trang chi tiết sản phẩm. Một tuần sau bạn muốn biết nút đó được dùng bao nhiêu lần, và mọi người trong đội đều tưởng rằng "chắc chắn hệ thống có ghi lại".
Điều thực sự xảy ra: nếu không ai viết dòng gửi event, cú bấm đó biến mất ngay khi xảy ra. Database có bản ghi "giỏ hàng có sản phẩm X" — nhưng nó không nói ai đã thêm từ màn hình nào, và hoàn toàn không nói gì về những người bấm mà không thành công.
Dòng viết vào ticket, copy được nguyên văn:
Khi người dùng bấm "Thêm vào giỏ" và sản phẩm đã thực sự vào giỏ,
gửi event `add_to_cart` với các property:
product_id (chuỗi, bắt buộc) — mã sản phẩm
product_name (chuỗi) — tên hiển thị
price (số nguyên, VND) — giá đang hiển thị tại thời điểm bấm
quantity (số nguyên) — số lượng thêm vào giỏ
source_screen (chuỗi: "product_detail" | "search_results" | "category_list")
Nếu bấm mà không thêm được (hết hàng, lỗi mạng), gửi event
`add_to_cart_failed` với cùng bộ property và thêm error_reason.
Vì sao có source_screen: mười hai chữ trong ticket này là thứ sau đó cho bạn trả lời câu "khách thêm vào giỏ từ đâu nhiều nhất — trang chi tiết, kết quả tìm kiếm hay danh mục?". Không có nó, bạn vẫn biết tổng số, nhưng vĩnh viễn không biết nên đầu tư vào màn hình nào.
Vì sao có add_to_cart_failed: nếu chỉ track lần thành công, một sự cố khiến 30% cú bấm thất bại sẽ hiện ra dưới dạng "số lượt thêm giỏ giảm nhẹ" — trông y như nhu cầu giảm, và không ai đi tìm nguyên nhân.
Học được: "đếm số lượt bấm" không phải chuyện hiển nhiên của hệ thống; nó là một dòng yêu cầu mà ai đó phải viết ra trước khi tính năng lên. Và mỗi property bạn thêm vào dòng đó chính là một câu hỏi mà bạn sẽ trả lời được sau này.
Tình huống: bạn sắp làm lại luồng thanh toán. Phản xạ thông thường là đi từ màn hình: liệt kê các nút rồi track hết. Cách đúng thì ngược lại — bắt đầu bằng câu hỏi: "Một tháng sau khi chạy, tôi sẽ phải trả lời những câu nào?"
Bốn câu hỏi bạn viết ra trước, cùng với trưởng nhóm vận hành:
Bốn câu hỏi đó dịch thẳng thành tracking plan:
| Câu hỏi sẽ phải trả lời | Event cần có | Property bắt buộc |
|---|---|---|
| Bỏ ở bước nào | checkout_started, shipping_info_submitted, payment_method_selected, order_placed | checkout_id, step_index |
| Cách thanh toán nào bị bỏ | payment_method_selected | payment_method ("momo" | "vnpay" | "cod" | "the_ngan_hang") |
| Khách mới hay khách cũ | tất cả các event trên | user_id, is_first_order (đúng/sai) |
| Mã giảm giá | promo_code_applied, promo_code_rejected | promo_code, reject_reason |
Bốn quy tắc đặt tên, thống nhất một lần cho cả sản phẩm:
order_placed, không phải place_order. Event mô tả chuyện đã rồi, không mô tả ý định.Add_To_Cart và add_to_cart là hai event khác nhau trong mọi công cụ, và bạn sẽ mất một buổi để phát hiện ra điều đó.checkout_started chứ không phải blue_button_clicked. Nút sẽ đổi màu, đổi chữ, đổi vị trí; sự kiện nghiệp vụ thì không.payment_method_selected kèm property payment_method tốt hơn ba event momo_selected, vnpay_selected, cod_selected. Vì thêm một cách thanh toán mới khi đó chỉ là thêm một giá trị, không phải sửa lại mọi biểu đồ đã dựng.Dòng acceptance criteria đưa vào ticket, nằm ngay cạnh các AC chức năng:
AC-7 (tracking): Trên môi trường test, đi hết luồng thanh toán và đặt hàng
thành công thì trong công cụ analytics phải thấy đủ 4 event theo đúng thứ tự,
mỗi event có đủ property bắt buộc, không property nào rỗng.
Ticket chỉ được chuyển sang Done khi kiểm tra này đạt.
Học được: tracking plan viết từ câu hỏi đi ngược lại, không phải từ màn hình đi ra. Và nó phải nằm trong cùng ticket với tính năng — tách thành ticket riêng thì nó luôn là thứ bị cắt đầu tiên khi sprint hết chỗ, và không ai nhớ ra cho tới lúc cần số.
Tình huống: luồng thanh toán mới đã chạy được một tháng, số liệu nhìn khá đẹp. Trong buổi review, giám đốc vận hành hỏi: "Tỷ lệ đặt hàng thành công ở Hà Nội so với Đà Nẵng thế nào? Tôi cần con số này để chốt ngân sách giao hàng quý tới." Bạn mở công cụ analytics: event order_placed có product_id, có payment_method, không có thành phố.
Cái bẫy, gọi tên thẳng: đừng bao giờ giả định có thể tính bù dữ liệu về sau. Event là một ảnh chụp tại đúng thời điểm hành động xảy ra. Suốt một tháng qua, mỗi lần một khách đặt hàng, thông tin thành phố có nằm ngay trên màn hình đó — và đã đi qua mà không được ghi lại. Nó không nằm chờ ở đâu cả.
"Nhưng địa chỉ giao hàng có trong database đơn hàng mà?" Đúng, và đó chính là cái bẫy phụ khiến người ta tưởng cứu được. Bạn có thể lấy được tử số: bao nhiêu đơn thành công ở mỗi thành phố. Nhưng câu hỏi là tỷ lệ, và mẫu số là "bao nhiêu người ở Đà Nẵng đã bắt đầu thanh toán". Những người bỏ giữa chừng không tạo ra đơn hàng nào, nên họ không tồn tại trong database đơn hàng. Mẫu số đó vĩnh viễn không có.
Cái giá, tính bằng con số cụ thể:
city vào các event: khoảng nửa ngày công của một dev. Rẻ.Ba việc để lần sau không lặp lại:
user_id, is_logged_in, platform (web/ios/android), app_version, city (suy ra từ hồ sơ hoặc địa chỉ mặc định), utm_source. Chi phí gần như bằng không vì chỉ làm một lần; đổi lại bạn cắt được mọi số liệu theo các chiều này mà không phải sửa từng event.Học được: event tracking là kỹ năng duy nhất trong khung này mà sai lầm không sửa được bằng cách làm lại. Với mọi thứ khác, sửa xong là có ngay kết quả đúng. Với tracking, sửa xong bạn mới bắt đầu đếm từ số không — nên giá trị của BA nằm hoàn toàn ở nửa giờ trước khi dev code, không phải ở lúc đi tìm cách cứu.
Với mỗi tính năng bạn spec, ticket phải trả lời được bốn câu trước khi dev bắt đầu:
blue_button_clicked), rồi mất hết lịch sử khi giao diện đổi.Chấm từng chiều kỹ năng và cho ra hồ sơ — biết mình đứng ở đâu trước.
Làm bài nàyHọc kỹ năng này ở đâu?
Có 2 khóa dạy đúng phần này, miễn phí và bằng tiếng Việt.
Thảo luận & tài liệu thêm 0
Chia sẻ kinh nghiệm, đặt câu hỏi, hoặc đính kèm tài liệu/YouTube giúp người khác học kỹ năng này.