For You notes

Dynamic time decay

February 01, 2026

When For You started I didn't have a way to tell which posts the user has seen. When the user refreshed the feed - they would get the same ranking of results.

To make it feel more dynamic I added an exponential time decay with a half-life of 6 hours.

spacecowboy's avatar
spacecowboy
6mo

The For You feed has felt a bit too static because older posts (posted 12-24 hours ago) tend to sit at the top as they have more time to accumulate more likes. To make it surface fresher content more often I applied an exponential time decay with a half-life of 6 hours.

It means that the score of an item gets reduced by 50% when the age of the item reaches 6 hours, -75% by 12 hours, -87.75% by 24 hours.

The idea was to get older items sink to the bottom and give space to newer items.

To make it even more dynamic I made the half-life depend on how long ago since you last opened or refreshed For You:

  • Last visit >6 hours ago => half-life is 6 hours

  • Last visit <1 hour ago => half-life is 1 hour

  • Otherwise half-life=<time since last visit>

spacecowboy's avatar
spacecowboy
5mo

For You applies a heuristic to keep content fresh: decay the score of the item based on its age. If you visit 6 hours since your last visit the half life of this decay is 6 hours. If you visit < 1 hour from last visit => half life is 1 hour. Otherwise the half life is the time since your last visit.

The idea was that the more recently you opened the feed the more likely you have seen an older post in your previous visit and the more heavily we should penalize older items.

Since then the Bluesky client app started telling the feed generator which feed items the user has seen:

spacecowboy's avatar
spacecowboy
3mo

Indeed, I'm seeing a lot of app.bsky.feed.defs#interactionSeen in the For You logs! With this change released I can clean up a bunch of hacks (based on scrolls and likes) I used to infer seen posts.

This is thanks to the patch Dan sent:

dan's avatar
dan
4mo

here goes

Send inferrable interactions to third-party feeds by gaearon · Pull Request #9094 · bluesky-social/social-app

Send inferrable interactions to third-party feeds by gaearon · Pull Request #9094 · bluesky-social/social-app

Currently, non-Bluesky algorithmic feeds are operating at an enormous disadvantage because they don&#39;t get the &quot;seen&quot; interaction. So they either have to aggressively prune all posts t...


https://github.com/bluesky-social/social-app/pull/9094

Now that For You knows which posts the user has seen the heuristic to demote older posts is no longer serving its original purpose. Do we just rip it out?

Not completely. We do want some form of time-decay because otherwise posts that have been out there for longer are able to accumulate more likes. It makes it unfair.

One thing I want to remove is the dynamic part of time decay and replace it with a static half-life of 6 hours:

To measure the impact of such change I started an A/B test two days ago: 50% of the users get the old logic with the dynamic half-life and 50% get the new one with the fixed half-life.

The experiment has produced some remarkable in such a short time:

  • 36.58% fewer "Show less like this" interactions: 14,885 -> 9,440

  • 18.73% fewer users used "Show less like this": 2,829 -> 2,299 (statistically significant)

  • 5.07% more likes: 876,103 -> 920,547 while the number of users who liked at least one post remained the same (-0.11%: 61,350 -> 61,285)

On the other hand, the age of posts seen in For You has increased ~2x: 149.3 -> 324.9 minutes (~2.5 -> 5.4 hours)

I do recognize that people do value the freshness of content in For You:

hailey's avatar
hailey
3mo

the reason imo that the for you feed is so good is because it seemingly prioritizes recency. this is good imo. i don’t care about stuff that happened hours ago. i dont care about replying to someone who is offline. i want to talk to people who are active rn and are talking about stuff i like.

The question is whether the reduction in freshness is worth the 37% reduction in "show less like this" and 5% increase in likes. I lean toward "yes". What do you think?

I will keep running the experiment for another week or so to get more data and user feedback.

Subscribe to For You notes
to get updates in Reader, RSS, or via Bluesky Feed