Varun Srinivasan pfp
Varun Srinivasan
@v
A quick history of the Farcaster feed. Back in 2021, the first version of the feed just showed you every post, starting with the newest. There wasn't a way to unfollow! This was ok because we were just a 100 or so weird internet people who liked hanging out together. We added follows soon after, when someone started annoying someone else. This hurt new users quite a bit because they started with an empty feed and had to do a lot of work to make it good. So we picked the most active users each week and suggested they follow them when signing up. It was built in an incredibly simple way. Every time you loaded your app, we'd run a sql query to fetch the latest casts, hydrate the links and images and serve you a feed. At some point, we moved this into a background job so it would run every 30 seconds, and slow down if you stopped checking the app.
11 replies
29 recasts
233 reactions

Varun Srinivasan pfp
Varun Srinivasan
@v
We added replies soon after, and had them show up in the feed. The network was still really small and slow at this time so we added "reply bumping". If a post got replied to, it would get bumped all the way to the top of your feed, showing you the newest reply. This made the feed feel a lot more dynamic and active. People quickly figured out that the best way to get engagement was to ask feel good questions. You'd get a lot of replies which kept you at the top of the feed. This was the first "algo gaming" and we had to put some limits on how often things got bumped up. The original feed architecture also stopped working when we got to a few hundred users. We switched to a fan-out model where a user’s feed was regenerated only when someone they followed casted. This had the nice property that every feed generation was useful — it would be guaranteed to add something new to the top of your feed. This new architecture introduced caching problems with counts. The feed would only regenrate if they were new posts, but people were liking the old posts frequently. These counts wouldn't update and then the user would get annoyed because they'd click into a post and see a different count. We solved this by adding periodic regeneration so you wouldn’t go a really long time without updating the counts. We also added a client side solution — if you loaded a conversation page and discovered a new cast count, your local cache would be updated which would override whatever the server response was.
3 replies
6 recasts
64 reactions

Varun Srinivasan pfp
Varun Srinivasan
@v
People started complaining a lot about missing posts. You’d often see a quote cast and go “hey i never saw that cast that was quoted and I follow the author”. It happened to me a lot with Vitalik’s casts in particular — i’d often see a quote cast of it two days later and always miss the original. People thought the “algo feed” was to blame but when we dug in, it turned out to be the opposite problem. When I logged on in the morning I’d have about 100 unread casts. I’d read like 20-30 of them and then go do something else. When I come back there’s probably another 20 unread casts which I might catch up on. But the problem is that the casts I missed earlier are now buried under a bunch of read casts. It’s extremely unlikely that I’d go digging in to find them again. We introduced a “Since you’ve been gone” feed to solve this. If you were gone more than 8 hours you’d see a special feed on your next load. Instead of being reverse-chron, this feed would take all the casts in the last 8 hours and then order them by engagement. So if you had a fine time to catch up on what you missed at least you’d see the most interesting stuff first.
1 reply
0 recast
24 reactions

D’ Guine-man 💪🏿 pfp
D’ Guine-man 💪🏿
@guineman
Wow Built brick by brick 🧱 💜
0 reply
0 recast
0 reaction

👏 pfp
👏
@huntbot
@v, you just received 101 claps from @mintclub on this content! Want to join the fun? Explore content, swipe right to clap, and earn $HUNT based on your own clapping activity. Your daily clap allowance: 200 👏 Install the Clap Mini App to get +50 free daily allowance 👇
0 reply
0 recast
1 reaction