Dev-note·Aug 10, 2026·9 min read

Định mở lớp dạy user dùng app, may là kịp dừng lại

User mới về nhưng chẳng ai làm gì cả. Phản xạ đầu tiên của mình là dạy họ kỹ hơn. Hoá ra họ không muốn học, họ chỉ muốn biết bao giờ thì có tiền.

Q
QuyenTMThợ code

Mở bài

MoiCash là sản phẩm hoàn tiền mình đang làm, mua hàng qua link của app thì được hoàn lại một phần hoa hồng.

Mấy hôm nay mình bắt đầu chạy quảng cáo. Người về thật, số lượt cài tăng gấp mấy lần so với trước, nhìn biểu đồ đăng ký đi lên cũng thấy vui vui.

Rồi mình mở database lên đếm xem những người đó vào app làm gì.

Câu trả lời là không làm gì cả.

Hơn tám mươi phần trăm mở app dưới mười phút rồi biến mất luôn, không quay lại nữa. Tỉ lệ tạo cái link đầu tiên, tức là hành động cốt lõi của sản phẩm, rơi xuống còn khoảng mười lăm phần trăm. Trước đó, hồi người dùng về theo đường tự nhiên, con số này nằm quanh ba mươi tới gần bốn mươi.

Phản xạ đầu tiên của mình rất nhanh và rất tự nhiên: chắc tại họ không hiểu sản phẩm. Vậy thì phải dạy cho kỹ hơn.

Thế là mình ngồi vẽ một luồng onboarding năm màn, đặt tên hẳn hoi là MoiCash Academy. Chào mừng bạn đến với khoá học, chọn sàn bạn hay mua, tracking link là gì, chuyển đổi là gì, và màn cuối chúc mừng bạn đã hoàn thành khoá hướng dẫn.

Nhìn cũng ra dáng lắm. Đủ bước, đủ nút bỏ qua cho người thạo rồi, luồng rẽ nhánh đàng hoàng.

May là trước khi ngồi code, mình đem cái wireframe đó ra soi lại một lượt cùng với số liệu. Và càng soi thì càng thấy mình đang đi giải sai bài.

Thân bài

1. Số liệu không hề nói rằng họ không hiểu

Đây là chỗ mình nhận ra đầu tiên, và nó làm mình hơi khựng lại.

Cái giả định "user không hiểu nên không dùng" nghe rất hợp lý, nhưng mình không có một mẩu bằng chứng nào cho nó cả. Thứ mình có trong tay chỉ là hành vi: vào, ở lại vài phút, rồi đi.

Người ở lại vài phút rồi đi thì không phải là người đang bối rối không biết bấm nút nào. Người bối rối sẽ mò mẫm, sẽ bấm lung tung, sẽ ở lại lâu hơn. Vài phút rồi đi là hành vi của người đã quyết định là cái này không đáng để bỏ thêm thời gian.

Mà nếu vậy thì dạy kỹ hơn chẳng giải quyết được gì. Một người đã định đi thì thêm năm màn hướng dẫn chỉ làm họ đi nhanh hơn thôi.

Mỗi màn thêm vào onboarding là thêm một cửa thoát, chứ không phải thêm một bậc thang.

Mình nghĩ đây là cái bẫy chung của người làm sản phẩm. Thấy user không dùng tính năng, phản xạ là giải thích thêm. Nhưng phần lớn trường hợp thì họ hiểu đủ rồi, chỉ là chưa thấy đáng.

2. Đi tìm số liệu về màn hướng dẫn cũ, mới biết nó chết từ lâu

Trước khi thiết kế cái mới, mình muốn xem cái hướng dẫn đang có hiệu quả tới đâu. Trong database có sẵn một cột đánh dấu thời điểm người dùng xem hướng dẫn, nên chỉ cần một câu query.

Kết quả là số không, suốt mấy tháng liền.

Ngồi truy ngược lên code thì hoá ra thế này. App từng có một màn hướng dẫn viết trong app, vào màn đó thì cột kia được ghi. Sau này mình chuyển hướng dẫn ra trang web cho dễ cập nhật, và hai chỗ gọi tới nó đều đổi thành mở trình duyệt. Cái màn cũ vẫn còn nguyên trong code, vẫn khai báo route đầy đủ, chỉ là không còn đường nào dẫn vào nó nữa.

Đoạn ghi nhận nằm bên trong màn đó. Màn không ai vào thì đoạn ghi nhận cũng không bao giờ chạy.

Chuyện này tự nó thì nhỏ. Nhưng nó kéo theo một hệ quả to hơn: cái báo cáo phễu người dùng của mình có một bước là "đã xem hướng dẫn", và bước đó đọc đúng cái cột kia. Nghĩa là suốt mấy tháng, mỗi lần mở báo cáo ra mình đều thấy phễu gãy sạch ở bước đó, và mặc định trong đầu là người dùng không thèm đọc hướng dẫn.

Thực tế thì mình không biết gì cả. Không phải họ không đọc, mà là mình không đo.

Một tín hiệu chết không kêu lên tiếng nào. Nó chỉ lặng lẽ báo về số không, và mình thì đọc số không đó thành một kết luận.

Đây là lần thứ hai trong vài tháng mình dính đúng kiểu lỗi này, lần trước là cái gate chống gian lận chưa chặn được ai vì app chưa bao giờ gửi dữ liệu lên. Nên giờ mình có thêm một thói quen: cái gì đo được mà đang báo về số không, thì kiểm tra xem nó thật sự bằng không, hay là đường dây đã đứt.

3. Mình đang dạy từ vựng của mình, không phải của họ

Quay lại cái wireframe. Hai trong năm màn có tiêu đề là "Tracking link là gì?" và "Chuyển đổi là gì?".

Ngồi đọc lại hai cái tiêu đề đó mà thấy hơi ngượng.

Tracking link là chi tiết triển khai của mình. Chuyển đổi là từ mình mượn của bên affiliate để gọi tên một bản ghi trong database. Cả hai đều là ngôn ngữ của hệ thống, do mình nghĩ ra để mình nói chuyện với nhau cho tiện. Không có người dùng nào tải một cái app hoàn tiền về vì muốn hiểu tracking link là gì.

Cái buồn cười là mình biết điều này. Nếu ai hỏi thì mình sẽ trả lời ngay là đừng bắt user học thuật ngữ nội bộ. Nhưng lúc tự ngồi vẽ luồng cho sản phẩm của mình thì lại vẽ ra đúng như vậy, rất tự nhiên, không thấy có gì sai.

Mình nghĩ lý do là vì làm lâu quá thì mấy từ đó thành tiếng mẹ đẻ. Nó không còn cảm giác là thuật ngữ nữa, nó là cách duy nhất mình biết để gọi tên thứ đó.

4. Hỏi lại thì hoá ra họ chỉ quan tâm ba câu

Chỗ này là chỗ xoay chuyển cả bài toán, và nó không tới từ số liệu, mà tới từ việc nhớ lại xem người dùng thật sự nhắn hỏi cái gì.

Không ai hỏi tracking link là gì. Không ai hỏi chuyển đổi là gì.

Họ hỏi ba câu, đi đi lại lại chỉ ba câu đó:

  • Tiền hoàn về kiểu gì?
  • Được hoàn bao nhiêu?
  • Bao giờ thì nhận được tiền?

Nhìn ba câu đó xong thì cái luồng năm màn kia sụp đổ. Nó không trả lời câu nào trong ba câu cả. Nó dành hai màn giải thích cơ chế bên trong, một màn dẫn người dùng mới vào xem lịch sử giao dịch mà lịch sử đó thì đang rỗng, và một màn chúc mừng đã học xong.

Onboarding tốt không phải là dạy hết những gì mình muốn nói. Nó là trả lời đúng những gì người ta đang thắc mắc, càng nhanh càng tốt.

5. Ba câu hỏi thành ba màn

Sau khi bỏ hết phần lý thuyết, luồng mới còn đúng ba màn, mỗi màn trả lời một câu.

Màn một trả lời câu "được bao nhiêu". Hỏi người dùng hay mua ở đâu, chọn xong thì hiện luôn con số trung bình mỗi đơn ở sàn đó được hoàn bao nhiêu. Bước chọn này mình giữ lại từ bản cũ, vì nó vừa cá nhân hoá được nội dung phía sau, vừa tạo một cam kết nhỏ mà không tốn công gì của người dùng.

Màn hai trả lời câu "hoàn kiểu gì". Câu này không giải thích bằng chữ được, phải cho họ làm thử một lần. Dán một cái link sản phẩm vào, rồi thấy ngay số tiền sẽ được hoàn cho đúng món đó. Đây là chỗ duy nhất trong cả luồng mà người dùng thật sự làm gì đó, và cũng là chỗ họ nhìn thấy tiền lần đầu tiên.

Màn ba trả lời câu "bao giờ nhận". Một cái timeline đơn giản: mua xong, khoảng một ngày sau đơn hiện lên trong app, rồi vài ngày nữa tiền vào ví.

Phần lý thuyết mình không vứt đi, chỉ chuyển thành gợi ý hiện đúng lúc. Lúc cái link vừa tạo xong thì mới nói link này để làm gì. Lúc đơn đầu tiên về thì mới giải thích trạng thái của nó nghĩa là gì. Kiến thức đến vào lúc người ta đang cần thì mới dính, còn nhồi trước thì trôi hết.

Đảo thứ tự thôi, chứ không bỏ gì cả. Cho làm trước, giải thích sau.

6. Mấy cái bẫy nhỏ mà suýt thì dính

Ngoài chuyện framing sai, ngồi soi kỹ cái wireframe cũ còn ra thêm vài chỗ hỏng rất đời thường.

Nút dán link mà không có gì để dán. Màn hướng dẫn có một nút "Dán liên kết", giả định là clipboard đang có sẵn link sản phẩm. Nhưng người vừa tải app xong thì clipboard rỗng, hoặc chứa thứ chẳng liên quan. Bấm vào không ra gì, mà đó lại đúng là bước quan trọng nhất. Phải có thêm một đường thoát kiểu "chưa có link à, thử link mẫu này", để họ đi trọn được một vòng mà không phải rời app đi tìm.

Màn lịch sử cho người chưa có lịch sử. Có một bước dẫn người dùng mới sang xem danh sách link đã tạo. Người mới thì danh sách đó trống trơn. Dẫn ai đó vào một cái màn rỗng ở phút đầu tiên chẳng khác gì nói với họ rằng ở đây không có gì đâu.

Nút đẩy người ta ra khỏi app. Trong luồng có một nút mở video hướng dẫn trên YouTube. Ở phút đầu tiên mà đẩy người dùng sang một cái app khác, nơi có vô số thứ hấp dẫn hơn đang chờ, thì khả năng họ quay lại là bao nhiêu. Đây cũng chính là cái bẫy mình đã dính một lần rồi ở mục hai, chuyển hướng dẫn ra ngoài xong mất luôn cả người lẫn số liệu.

7. Con số đẹp nhất thì mình lại đang giấu

Trong lúc đi lấy số để điền vào màn ba, mình chạy một câu query tính xem từ lúc người dùng bấm mua tới lúc tiền vào ví thì mất bao lâu.

Trung bình ba ngày rưỡi. Hơn chín mươi sáu phần trăm số đơn nhận được tiền trong vòng một tuần. Đơn lâu nhất từng ghi nhận là mười sáu ngày.

Ngồi nhìn con số đó một lúc mới thấy tiếc. Mấy dịch vụ hoàn tiền mà mình biết thường trả sau ba mươi tới chín mươi ngày, có chỗ còn lâu hơn. Đây là thứ mạnh nhất mà sản phẩm đang có, và nó không xuất hiện ở bất cứ đâu. Không có trong onboarding, không có trong quảng cáo, không có trên trang chủ.

Mình bận đi giải thích tracking link là gì, trong khi thứ đáng nói nhất thì để im trong database.

Có một chi tiết nữa cũng lôi ra được từ cùng câu query đó. Từ lúc mua tới lúc đơn hiện lên trong app mất khoảng mười chín tiếng, do phải chờ đồng bộ về. Nghĩa là người dùng mua xong, hào hứng mở app ra xem, và không thấy gì cả.

Gần một ngày im lặng, đúng vào lúc họ còn đang nghi ngờ nhất. Chỉ cần một dòng chữ báo trước là đơn sẽ xuất hiện sau khoảng một ngày, mình đã chặn được toàn bộ nhóm người sẽ tự kết luận rằng cái app này hỏng rồi.

Kết bài

Bài này mình viết lúc chưa code xong, nên chưa có kết quả gì để khoe cả. Có thể luồng ba màn kia cũng chẳng ăn thua, và mình lại phải ngồi nghĩ tiếp.

Nhưng ít nhất lần này mình biết mình sẽ nhìn vào cái gì để biết là ăn thua hay không. Chỉ một con số duy nhất, là tỉ lệ người dùng tạo được cái link đầu tiên trong vòng hai mươi bốn giờ sau khi đăng ký. Đang mười lăm phần trăm. Nếu sửa xong mà nó không nhúc nhích thì tức là mình vẫn đang giải sai bài, và phải đi tìm chỗ khác chứ không phải sửa tiếp mấy cái màn này.

Thứ mình nhặt được lớn nhất qua vụ này không phải là bài học về thiết kế onboarding, mà là chuyện mình đã suýt bỏ cả tuần đi xây một thứ giải quyết một vấn đề không tồn tại. Cái giả định "user không hiểu nên không dùng" nó tới nhanh và tự nhiên tới mức mình không kịp nhận ra là mình chưa kiểm chứng gì cả.

Nếu bạn cũng đang định làm hoặc sửa onboarding cho sản phẩm của mình, thì thử hai việc này trước khi ngồi vẽ màn nhé.

Một là mở log hỗ trợ hay tin nhắn người dùng ra, đếm xem họ thật sự hỏi những câu gì. Không phải câu mình nghĩ họ sẽ hỏi.

Hai là chạy một câu query xem cái hướng dẫn đang có đã được bao nhiêu người xem. Biết đâu nó cũng chết từ lâu rồi mà mình không hay, như của mình.

Và thôi đến đây thôi, chúc các bạn có những có những dòng code thật nà chất nượng! Xin chào và hẹn gặp lại các bạn ở những bài viết sau

#Product#Onboarding#Data#Tập làm văn