anki icon indicating copy to clipboard operation
anki copied to clipboard

Consider a user-friendly 'streak'

Open dae opened this issue 6 months ago • 11 comments

Some users like to use third-party add-ons to track their 'streak' to provide motivation/keep them honest. I've resisted adding such a feature up until now, because the existing implementations can be toxic - users get overly disappointed when they miss a day for some reason, and feel inclined to do things like set the date back in time and/or do single-card reviews to maintain their streak.

I think a better approach would be something that averages performance out over time, and allows for low/off days. Preferably where the user decides the bar they want to set, perhaps guided by their daily workload amount. And maybe a rolling average, so that bad past performance doesn't lead to users getting stuck in a hole?

dae avatar Jun 14 '25 14:06 dae

Hi @dae,

I'm a student contributor working on a university assignment. I'd like to experiment with a friendly streak tracker prototype, based on a 7-day rolling average with a daily review goal set by the user (e.g. 50 cards/day).

Would it be helpful if I created a small side-widget (possibly Qt) that summarizes "6 of 7 days met", with customizable goal?

Thanks!

Alhaj-nit avatar Jun 15 '25 12:06 Alhaj-nit

If this is implemented, it wouldn't be in Qt, as we'd want it in the mobile clients too. But we need to discuss it first: https://github.com/ankitects/anki/pull/4088#issuecomment-2982709761

dae avatar Jun 19 '25 13:06 dae

You can see what other habit tracker apps offer instead of a streak.

https://github.com/iSoron/uhabits/discussions/689

Example

How is the score calculated? To compute the score of a habit, the app uses a statistical method known as exponential smoothing. Basically, it computes a weighted average that takes into consideration every repetition of the habit, from the very first day you started your habit until today. Recent repetitions, however, are considered more important than older ones, and have a larger impact on the score. This method has many nice features, including: Every repetition counts, even way back in the past. This is not true for other simpler formulas, such as counting how many times have you performed the habit in the last week/month/year and then dividing by the number of days in that interval. If you have a poor habit score, then a few repetitions can bring your score up very quickly. As your score improves, however, the reward for each repetition gets smaller and smaller, so you have to keep at it if you want to see further increases. If you have a high score for a very long time and you take a short break, it's quite easy to restore your score back to what it was. If you start taking frequent breaks, however, then your score will suffer. How long will it take to reach the highest score? If you perform a daily habit perfectly, the score reaches 80% after one month, 96% after two months and 99% after three months. For non-daily habits, it takes longer to reach the same percentages. If your habit is repeated every other day, for example, then it takes two months to reach 80%, and if you habit is weekly, then it takes seven months.

Gardengul avatar Jun 21 '25 15:06 Gardengul

Loop Habit Tracker's score system is capped. That is, after you reach 99 percent, it's no longer rewarding to keep reviews. Instead, it's punishing you (even if slightly) each time you stop reviewing.

I like the idea, but if it's implemented, it should just keep increasing indefinitely without diminishing returns.

ZornHadNoChoice avatar Jun 23 '25 20:06 ZornHadNoChoice

ZornHadNoChoice it continues to increase even after 99%, but slower. In anki there is already a graph that does not penalize and infinitely increases. Graph Reviews. But it doesn't encourage me, it doesn't make any sense. There is also a proposal for the Estimated total knowledge schedule. It practically does not punish and, in theory, grows indefinitely. And this figure is interpretable. https://forums.ankiweb.net/t/estimated-total-knowledge-graph-over-time/57390

Gardengul avatar Jun 25 '25 06:06 Gardengul

@Gardengul I know, that's why I said "without diminishing returns" at the end.

My point is that people like to see "bigger numbers". 99.35 isn't more exciting than 99.12.

ZornHadNoChoice avatar Jun 25 '25 08:06 ZornHadNoChoice

Related suggestion: https://forums.ankiweb.net/t/beyond-streaks-daily-weekly-anki-goals/62943

Danika-Dakika avatar Jun 27 '25 20:06 Danika-Dakika

Streaks are currently being considered whether they should be implemented into Anki, where dae seems to want to do away with traditional streaks in favor of a daily goal

Not sure where that came from. The idea I had in my head when writing was more like "missing one or two days a week doesn't reset the streak". My initial thought was to have a certain amount of leeway before resetting, but perhaps we should try to avoid resetting at all, eg have a missed day decrease the streak but not reset it? The comments above about increasing numbers above seem reasonable too - an ever-increasing number (when one is performing well) seems more motivating than something that converges to 100%.

dae avatar Jun 30 '25 08:06 dae

I updated the forum thread to correct it; thank you for the clarification!

Exora-Wave avatar Jun 30 '25 19:06 Exora-Wave

@dae

What if instead of a streak, Anki showed the daily average number of reviews over the last N days?

It would remove the black-and-white “streak mentality” while still keeping users motivated. For example, show the average over the last month or last 14 days or let the user choose the range. Some might prefer 7 days, others 30, or even 100.

Say-Hi-To-Me avatar Jul 18 '25 11:07 Say-Hi-To-Me

Proposal: a score based on the percentage of reviews done each day

The score increases each day by 2X-1 where 0 ≤ X ≤ 1 is the percentage of reviews done on that day.

  • Learn, relearn, filtered, buried, and suspended cards are ignored.
  • If there are no reviews for a day, the score doesn't change.
  • The total number of reviews should be capped to account for the daily review limits.
    • Also, because of these limits, the score should be computed on a day by day basis.
  • The score should not be allowed to go below 0. This is to avoid destroying users returning after a very long break.
  • The score starts at 0.

Pros

  • Can grow indefinitely.
  • It represents the consistency of the user: doing more than half your due reviews each day increases the score, while doing less decreases it, proportionally to how much more or less you do.
    • Unlike traditional streaks, this encourages users to do at least half their reviews a day, if they want the streak to stay high.
    • It's independent of the number of reviews or the time taken to study, making it more fair to compare with others.

Cons

  • It can be cheated by suspending, changing the limits, etc.
    • However, there is much less incentive to do this, since the score doesn't become zero after a missed day, and all these workarounds are going to bite anyone attempting them eventually.
  • It might cause some technical issues since it has to be updated daily (?).
    • Thus, current consistent users won't have a high streak, which can be considered good or bad depending on how you look at it.
  • It doesn't take into account learn, relearn and filtered reviews, as well as the time spent creating notes.
    • Though, it's usually necessary to do the (re)learn reviews before getting to the "normal" reviews, and the time spent creating notes is hard to track anyway.

Additional

  • We can call the score "consistency".
  • There could be a per deck consistency too.
  • Since the consistency changes over time, it makes for a nice graph in the stats screen.

ZornHadNoChoice avatar Sep 30 '25 08:09 ZornHadNoChoice