Design the recommendation system that powers Reddit's home feed. A logged-in user lands on their feed — how do you decide which posts to show them, in what order? Walk me through candidate generation, ranking, cold start, and how you'd measure success.
You mentioned using upvote ratio as a feature — but Reddit's community has very different upvote norms across subreddits. A 90% upvote ratio in r/worldnews means something different than in r/mildlyinteresting. How do you handle this, and what about explicitly controversial posts that generate huge engagement but also huge division?
Now go one layer deeper on serving. The user opens the app and we have 200ms to return the first page. What does the online architecture look like?
How do you prevent the feed from becoming a filter bubble while still personalizing strongly?
tldr
Reddit feed design should be a multi-turn system design: clarify goals, generate candidates from subscribed/trending/embedding/exploration sources, filter unsafe or ineligible content, rank with multi-task objectives, diversify the page, serve under tight latency, and evaluate both short-term engagement and long-term retention/community health. Normalize engagement per subreddit and explicitly control controversy, filter bubbles, and fallback behavior.
follow-up
- How would you detect and mitigate filter bubbles on Reddit — where a user's feed gradually narrows to only one type of content?
- Walk me through the trade-offs between a two-tower model and a cross-attention model for ranking. When does each win?
- How would you implement real-time session context — the last 3 things a user upvoted in this session — into your ranker at low latency?