I'd start with candidate generation — pulling from the social graph and interest signals using a two-tower retrieval model to get maybe a thousand candidates down from billions of posts. Then a ranking stage using a gradient-boosted tree or a deep neural net trained on engagement signals: likes, comments, shares, click-through rate. Features would include poster affinity, content type, recency, and user context like device and time of day. I'd evaluate offline with AUC and deploy with an A/B test to measure engagement lift.
I'd design this as cascaded ranking with an explicit efficiency budget at each stage. Two-tower retrieval brings a thousand candidates from the social and interest graph. A light ranker — cheap features, fast inference — trims that to two hundred. The heavy ranker then scores with full features: poster affinity, content signals, and real-time context. The critical design choice is the objective: pure click optimization is a known failure mode — it rewards clickbait and degrades long-term retention. I'd blend engagement signals with satisfaction proxies — survey-based labels, meaningful-time-spent, and saves over raw clicks — and instrument training/serving skew alerts so feature drift doesn't silently corrupt the model post-launch. For A/B testing, I'd measure short-term engagement and long-run session frequency over a multi-week holdout, because a ranking change that lifts clicks but decreases weekly active use is a regression, not a win.