Sovren · Discovery · 2022–2025
I owned what plays next.
Discovery is the feature nobody asks for and everybody notices. I owned it against a bar set by companies with a thousand times the data. Session time went from 9:30 to over 13:00.
Our benchmark was set by companies a thousand times our size.
Nobody opens a streaming product wanting a recommendation. They open it wanting the next thing to be good. When it isn’t, nobody files a ticket. They stop coming back. It is the quietest surface in the product and the one every session runs through.
The bar for it isn’t set by anyone we competed with either. It’s set by Netflix, YouTube and TikTok, on catalogues, headcount and behavioural data we were never going to have.
The question was how much session engagement this team could move with the data we had.
That splits into three I had to answer before anyone trained anything. Where does a team this size get the most movement per unit of effort. How do we prove the movement was ours and not the season. And how does the system keep improving once we stop watching it.
The objective, the mix, the rules, the signals and the bar.
Each one is a product decision that somebody has to make before a model can implement it.
Mine
- The objective function, in product terms. A model optimises a loss function. Somebody has to answer what a good session is and what we’d trade for it.
- Candidate sources and the mix between them. Follows, network, out-of-network, topic and the ratio. That bet moves numbers harder than any model tweak.
- Policy and eligibility. Integrity filters, author fatigue, dedup and diversity rules, floors for new creators, cold start for new members. Product rules, enforced in the reranker.
- Which signals the system could learn from at all. The not-interested control, follow, mute, hide, dwell instrumentation.
- The test portfolio and the launch bar. What gets tested, what counts as a win, and which guardrails hold whatever the topline does.
Not mine
- The ranking architecture, built by data science.
- Delivery, logging and latency, owned by engineering.
A Live tab is the version that skips the hard problem.
The obvious answer to mixed formats is a tab for each one, and most products ship it. I understand why. A Live tab moves the ranking problem onto the member. Two doors, and now they’re the one working out whether a four-minute-old stream beats the show they’ve been meaning to finish.
Nobody has ever thought I’m in the mood for a different content format. They finish something and they want the next thing.
So, one player, one shelf, one ranking. It was the harder build and I took it knowing that, because the tab would have shown up in the dashboard as engagement while quietly teaching members that live was a separate errand.
What I signed up for was cold start on something that expires. A live stream has no watch history, no completion rate, no tested thumbnail, and in an hour it’s gone. Short-form breaks the opposite way, thousands of cheap-to-test uploads arriving faster than any taxonomy team. Long-form is the easy case everyone optimises, because the data is already there.
Nothing ranks against anything until it describes itself the same way.
The work sat upstream of the recommender. Every asset, any length, any format, had to arrive already explained, with topic, interest and sentiment read straight off the material. On-demand got classified at ingest, where there’s no clock. Live got classified in flight, while the stream was still running.
We owned the transcoder, which is the only reason that was affordable. The encode was already touching every frame, so asking it what it was looking at cost little enough that nobody had to approve it stream by stream. How fast it answered set the floor on when a live stream became rankable, a harder constraint than any model choice we made.
Classification told us what a thing was about. It didn’t tell us whether anyone wanted it, and a live stream arrives with no accumulated history to answer that. So the second signal had to come from speed: behaviour in the first few minutes, read as how fast interest in it was moving. With both, a four-minute-old stream could earn a slot beside a two-year-old series.
Changing the objective reorders every signal under it.
Six signals decided a slot. Completion depth, social graph, interest affinity, engagement velocity, a diversity guard and recency. The argument was the weights, and the weights are a product decision that ships as a model config.
Ask the system for engagement and social graph and engagement velocity climb to the top, which on a mixed shelf hands almost every slot to short-form. Ask it for session depth and completion depth goes first and interest affinity comes up with it, and long-form gets a chance it didn't have a minute earlier.
I set the objective, so the reordering underneath it was mine to answer for. The weights below are illustrative and the behaviour is real. Watch them move.
That's why the cohorts mattered. One came for live and stayed for the archive. One used short-form as a funnel into long-form on the same interest. One treated long-form as the destination and everything else as a trailer. A single set of weights serves one of them well and the other two badly, so the weights had to move with the person.
This kind of system fails quietly. It narrows.
Two boundaries first. That 38% is session time against a holdout, and revenue sat outside it. The shelf shipped in 2024 with two formats and live joined in 2025. None of what follows shipped.
A recommender does not throw errors. The page still renders and the dashboard still moves while the ranker strips your catalogue down to whatever worked last week. Pinterest pulled the diversity term out of Home feed ranking, saves rose on day one and went negative by week two. Run that as a one-week test and you ship a win.
The velocity mechanic above is part of that. Ranking on how fast interest moves rewards whatever already has momentum, which on a mixed shelf is the format with the shortest feedback loop.
So three instruments, from day one.
- Coverage
- How much of the catalogue is reachable at all, counted on the item axis.
- Calibration
- Diversity spreads every feed out by the same amount. Calibration asks whether your feed still looks like you.
- Supply rate
- How fast fresh items reach the candidate pool. That is the defence after a diversity penalty stops working.