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.
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>
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:
This is thanks to the patch Dan sent:
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:
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.