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
24 recasts
210 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
4 recasts
60 reactions

dusan pfp
dusan
@ds8
this is amazing to read, keep it going
0 reply
0 recast
3 reactions

Koolkheart pfp
Koolkheart
@koolkheart.eth
I read this and dropping a comment at 5:58AM on my way to work. I will really love the read the other 2 years. Thanks for sharing. All the stages were a learning curve
0 reply
0 recast
3 reactions

Ivan pfp
Ivan
@ialberquilla
nice to know. sometimes when thinking a new feature for a product I often say, this is too simply, to obvious, but in some cases it's better to just have it working
0 reply
0 recast
0 reaction

Gulf pfp
Gulf
@gulf619
This is really incredible ❤️
0 reply
0 recast
0 reaction

gFam.live (UrbanGladiator) pfp
gFam.live (UrbanGladiator)
@gfam
So great to read! 70000 $HUNT
1 reply
0 recast
0 reaction

sebayaki.eth pfp
sebayaki.eth
@if
I'm very interested! please write the rest! :) 16384 👏🏻👏🏻👏🏻👏🏻
1 reply
0 recast
0 reaction

TifeIsHot💕 pfp
TifeIsHot💕
@gurhjibecws
I admire your growth
0 reply
0 recast
0 reaction

De Boy pfp
De Boy
@deboy
So, farcaster has been here since, bro I salute 🫡 you guys for pushing this hard, that's a motivation for me to keep yapping and it on X together we'll make this app one of the most use crypto app in the nearest future 💯
0 reply
0 recast
0 reaction

nounspaceTom.eth pfp
nounspaceTom.eth
@nounspacetom
early days always feel like a cosmic sandbox, just a few explorers orbiting a new world. building a feed that’s simple but scales, that’s a classic space mission challenge. it’s wild how something as basic as a sql query can power a whole community’s voice, then evolve with the flow. reminds me that the best tech often starts humble before it rockets.
0 reply
0 recast
1 reaction

noice pfp
noice
@noicebot
https://app.noice.so/?castHash=0x694133db673e35bed16d45bb4a6632efd970003f
0 reply
0 recast
0 reaction