Duolingo Streak - Vì sao người học cố giữ chuỗi?

Năm 2020, Duolingo viết rằng họ từng thấy những streak dài hàng trăm, hàng nghìn ngày vẫn được nối tiếp ngay cả vào ngày user kết hôn hoặc sinh con.
Đọc đến đây mình phải dừng một chút.
Giữa một ngày chắc chắn rất bận, đâu đó vẫn có người mở điện thoại lên làm một bài ngoại ngữ để con số cạnh hình ngọn lửa không quay về 0.
Streak của Duolingo vốn rất đơn giản. Hôm nay hoàn thành lesson thì chuỗi tăng thêm một ngày. Quên học, chuỗi đứt. Không có thuật toán AI cao siêu gì ở đây cả.
Đến cuối năm 2025, Duolingo báo cáo khoảng 43 triệu daily active users có streak từ 7 ngày trở lên. Khoảng 15 triệu người đã giữ streak ít nhất 365 ngày.
15 triệu người quay lại một sản phẩm mỗi ngày trong hơn một năm là con số khá điên rồ.
Nguồn: Duolingo Form 10-K 2025
Nhìn streak như một phần gamification để trang trí giao diện thì hơi phí. Nó là một tài sản do user tự xây từng ngày. Tài sản càng lớn, user càng có lý do quay lại bảo vệ nó.
Cơ mà cách Duolingo làm streak mạnh hơn lại là hạ điều kiện xuống.
Muốn user quay lại thì đừng bắt đầu bằng một mục tiêu quá to
Trước đây, Duolingo cho user chọn daily goal. Người học phải hoàn thành goal đó thì ngày học mới được tính vào streak.
Nghe hợp lý. Đã chọn mục tiêu “intense” thì phải học đủ nhiều, chứ làm một lesson bé tí cũng được tính sao?
Cơ mà nhìn vào dữ liệu thì cách làm này có vấn đề.
Duolingo phát hiện những người đặt daily goal cao có khả năng giữ streak thấp hơn, kể cả khi họ vẫn mở app hai ngày liên tiếp. Trong nhóm đã dùng app hai ngày nhưng không có streak, gần 40% đặt goal ở mức “intense” — mức cao nhất lúc đó.
Hóa ra, đặt daily goal quá cao lại khiến user khó giữ streak hơn.
Team Duolingo thử tách hai thứ ra. User chỉ cần hoàn thành một lesson để nối streak. Daily goal vẫn còn, nhưng nó trở thành một mục tiêu riêng.
Kết quả A/B test được Duolingo công bố như sau:
Day 14 retention tăng tương đối 3,3%.
Lượng daily active learners tăng tương đối 1%.
Sau 20 ngày, tỷ lệ daily learners có streak tăng tương đối 10,5%. Riêng với new learners, mức tăng là 19%.
Một năm sau, hơn một nửa daily learners có streak từ 7 ngày, trong khi trước thay đổi này con số chỉ khoảng một phần ba.
Nguồn: Duolingo - Improving the streak
Đến đây thì có thể viết ngay một câu rất growth: giảm friction sẽ tăng retention.
Nhưng trong chính thử nghiệm đó, số người hoàn thành daily goal lại giảm. User quay lại đều hơn, nhưng mỗi lần quay lại chưa chắc học nhiều bằng trước.
Trong cả đống số đẹp ở trên, mình quan tâm nhất tới chuyện số người hoàn thành daily goal bị giảm.
Học ngoại ngữ là một mục tiêu dài. Trong những ngày đầu, bắt user học thật nhiều có thể đem lại một session đẹp rồi mất luôn user vào tuần sau. Một lesson mỗi ngày trông hơi ít, nhưng nó giữ hành động “mở Duolingo và học” đủ nhẹ để lặp lại.
Duolingo đã ưu tiên tính liên tục ở giai đoạn đầu. Khi thói quen hình thành rồi, sản phẩm còn rất nhiều cách kéo user sang lesson tiếp theo.
Cách này chỉ ổn nếu lesson tối thiểu vẫn có chút giá trị và team tiếp tục đo kết quả học. Nếu user vào app, chọn bài dễ nhất, bấm cho xong để cứu streak rồi thoát thì retention vẫn xanh. Việc học thì chưa chắc.
Duolingo không công bố đủ dữ liệu trong bài thử nghiệm trên để mình kết luận chuyện đó xảy ra ở mức nào. Mình chỉ muốn tách hai metric ra: quay lại học và học được gì có liên quan với nhau, nhưng không phải một.
Streak càng dài càng phải có đường lui
Giả sử bạn giữ streak được 3 ngày rồi quên học. Hơi tiếc, làm lại cũng được.
Giữ được 863 ngày rồi mất mạng trên một chuyến bay thì cảm giác sẽ khác.
Một streak cứng nhắc có một điểm khá dở: nó có thể biến một lần lỡ hẹn thành lý do bỏ luôn. Bao nhiêu công sức trước đó bị giao diện gom về con số 0. User đang thấy mình tiến bộ bỗng thấy mình thất bại.
Duolingo sau đó bổ sung một số cơ chế để một ngày bỏ lỡ không xóa sạch streak.
Trong một A/B test cũ, họ cho user mua “Weekend Amulet” bằng tiền ảo để bảo vệ streak nếu nghỉ cuối tuần. Nhóm được cung cấp lựa chọn này có khả năng quay lại sau một tuần cao hơn 4% và khả năng mất streak thấp hơn 5%.
Nghe hơi ngược. Cho phép nghỉ lại giúp người ta tiếp tục lâu hơn.
Sau này cơ chế quen thuộc hơn là Streak Freeze. User trang bị trước một Freeze; nếu lỡ một ngày, Freeze lấp khoảng trống và chuỗi vẫn còn. Duolingo từng tăng số Freeze có thể giữ từ một lên hai và ghi nhận lượng active learners mỗi ngày tăng tương đối 0,38%.
Nguồn: Duolingo - How streaks keep learners committed và Duolingo - How the streak builds a habit
Mình khá thích cách họ không coi một ngày bỏ học là bằng chứng user hết động lực. Có người nghỉ vì lười thật. Có người đang ốm, mất mạng hoặc đơn giản là có một ngày tệ. Product không biết chắc lý do, nên cho user một khoảng thở thường có ích hơn việc phạt thẳng tay.
Phần business cũng bắt đầu xuất hiện ở đây.
Trong báo cáo 2025, Duolingo liệt kê Streak Freeze là một trong các vật phẩm có thể mua trong app. Khi giới thiệu Super Duolingo, công ty cũng đưa quyền sửa streak hàng tháng vào gói này. Duolingo không công bố riêng các cơ chế bảo vệ streak mang về bao nhiêu tiền, nên mình sẽ không đoán.
Nguồn: Duolingo Form 10-K 2025 và Duolingo - Introducing Super Duolingo
Nhưng flow giá trị khá rõ. User bỏ công xây streak. Duolingo bán hoặc tặng công cụ giúp user bảo vệ thứ đã xây. Cùng lúc đó, một streak được cứu làm tăng khả năng user quay lại, tiếp tục tạo ad inventory, mua vật phẩm hoặc sau này chuyển sang subscription.
Kèo này tốt cho cả hai phía khi Freeze giúp user quay lại mục tiêu học. Nó bắt đầu khó chịu nếu sản phẩm cố tình làm user lo lắng, tạo ra quá nhiều rủi ro mất streak rồi thu tiền để giải cứu. Ranh giới nằm trong cách thiết kế notification, số lần được nghỉ, giá của vật phẩm và cả việc team đang tối ưu cho hành vi học hay chỉ tối ưu nỗi sợ mất chuỗi.
Mấy thứ đó nhìn trên dashboard retention thì khá giống nhau.
Từ cam kết với bản thân sang cam kết với một người khác
Khi personal streak đã đủ mạnh, Duolingo đem nó gắn với quan hệ xã hội.
Friend Streak cho phép hai người giữ một streak chung. Không cần học cùng lesson hay online cùng lúc. Mỗi người chỉ cần hoàn thành phần học trong ngày của mình. Nếu bạn mình chưa học, app cho phép gửi một cú “nudge” để nhắc.
Theo dữ liệu Duolingo công bố, learners có ít nhất một Friend Streak có khả năng hoàn thành daily lesson cao hơn 22%. Tuy nhiên đây là dữ liệu quan sát được họ mô tả trong bài, mình chưa thấy thông tin cho biết con số này đến từ randomized A/B test. Những người chủ động kết bạn và mở Friend Streak có thể vốn đã chăm hơn rồi.
Nguồn: Duolingo - How we built Friend Streak
Dù vậy, cách team làm V1 khá đáng học.
Prototype đầu tiên chỉ chạy local trên máy của người test. “Người bạn” bên kia thậm chí không biết một Friend Streak đã được tạo. Bản này chưa phải social product thật, nhưng đủ để team nhìn thấy cách feature xuất hiện trong UI, cảm giác khi một chuỗi chung tăng lên và các edge cases có thể gặp.
Sau đó họ giới hạn mỗi user tối đa 5 Friend Streaks. Team có thiết kế để sau này mở rộng được, nhưng dữ liệu cho thấy nhóm có rất nhiều bạn active còn nhỏ và những người đã đạt 5 streak vốn đã retention tốt. Xây tiếp lúc đó chưa chắc đáng công.
Đoạn này rất Product Management. Có kiến trúc để đi xa không đồng nghĩa roadmap phải đi xa ngay.
Nếu copy streak, team mình đang muốn user lặp lại việc gì?
Streak nhìn dễ làm. Thêm một icon ngọn lửa, một bộ đếm ngày, vài notification là xong.
Copy như vậy thường chỉ mang về cái vỏ.
Duolingo có một hành động nhỏ, rõ và lặp lại được: hoàn thành một lesson. Hành động đó nối trực tiếp với lời hứa của sản phẩm là học ngoại ngữ. Streak làm hành động ấy dễ nhớ hơn, còn Freeze giúp một lần bỏ lỡ không phá hỏng toàn bộ cam kết.
Nếu đưa streak vào app tuyển dụng, app vay tiền hay một công cụ chỉ được dùng khi có nhu cầu, chúng mình có thể đang ép user mở app mỗi ngày mà chẳng tạo thêm giá trị gì. DAU lên được một đoạn, user thì phải làm thêm việc vớ vẩn để nuôi metric cho team.
Trước khi build, mình sẽ hỏi xem hành động nào thật sự đáng được lặp lại hàng ngày. User có nhận được giá trị sau mỗi lần làm không? Một ngày nghỉ có phá hỏng mục tiêu dài hạn không? Và khi streak tăng, metric kết quả của user có đi cùng không?
Với Duolingo, team cũng không thể chỉ nhìn số streak. Mình sẽ muốn xem thêm mức độ tiến bộ trong course, số lesson có giá trị được hoàn thành, khả năng quay lại sau khi chuỗi đứt và tỷ lệ user chỉ làm mức tối thiểu rồi thoát. Một streak 500 ngày rất đẹp; nó đẹp hơn nữa nếu người học thực sự sử dụng được thứ tiếng họ đang học.
Lời nhắn
Quay lại chuyện có người vẫn mở Duolingo trong ngày cưới hoặc ngày sinh con.
Streak đã làm tốt việc kéo họ trở lại app. Nó biến những ngày học rời rạc thành một thứ nhìn thấy được, tích lũy được và hơi đau khi mất đi.
Đó là một cơ chế product rất mạnh. Cũng vì mạnh nên team cần biết mình đang dùng nó để bảo vệ thói quen của user hay bảo vệ mỗi con số DAU.
Streak giữ người học quay lại. Product còn phải chịu trách nhiệm cho việc họ quay lại để làm gì.
Bài gốc trên Substack: https://henrypham.substack.com/p/duolingo-streak-vi-sao-nguoi-hoc
All rights reserved