Behind the Games

How Roster Relay Chooses a Daily Puzzle

Recognizable endpoints, route length, hub resistance, cooldowns, and why variety matters when choosing a Roster Relay puzzle.

A technically valid Roster Relay puzzle is pretty easy to make.

Pick two famous players.

Make sure there is some chain of teammates connecting them.

Done.

Unfortunately, that can also produce a pretty boring game.

If the shortest path every day runs through the same handful of players who had long careers, changed teams a lot, and seemingly played with half the league, you haven't really created much of a puzzle.

You've created a new reason to type LeBron James again.

And I have already played enough games where I eventually figured out the thing I could type every day.

I ruined Wordle for myself a little bit

I played Wordle every day for a long time.

Eventually I settled into using basically the same first two words every time.

It was a strategy.

Probably a decent one.

It also took away some of what I liked about the game.

I wasn't really looking at the puzzle fresh anymore. I was running my opening sequence and seeing what happened.

There's nothing wrong with that. People should play games however they want.

But when I started making Roster Relay, I didn't want the best approach to become:

Which enormous human sports-network hub should I use today?

Basketball has players like LeBron James who have played forever and with a huge number of teammates.

Baseball has guys like Jamie Moyer, whose career seems to connect several archaeological eras of Major League Baseball.

Football has its own version of this with players who bounced around the league for years.

Those players are useful.

That's exactly the problem.

The shortest route isn't always the most interesting route

Roster Relay gives you two endpoints and asks you to connect them through players who shared a franchise and season.

The obvious challenge is:

How few links can you use?

That's fun.

But I don't want that to be the only interesting question.

Maybe you find a three-link route using extremely obvious players.

Maybe someone else uses five links but somehow gets Knile Davis involved.

Personally, I may be more impressed by Knile Davis.

That's why the game keeps Links and Rarity as separate ideas rather than combining everything into one magical score that declares one person the Supreme Champion of Remembering Guys.

You can challenge yourself differently from day to day.

Some days, get there fast.

Some days, get weird.

So the endpoints matter a lot

The first job of the daily puzzle generator is finding two players people will actually recognize.

If both endpoints are obscure, you've already lost a lot of the fun.

The middle of the route is where I want people digging into the dusty part of their sports memory.

The beginning and end should generally give them somewhere solid to start.

So Roster Relay gives preference to recognizable endpoint players, using the same general fame information that helps drive the game's Rarity system.

Then it asks:

Is there an interesting path between them?

Not merely a path.

An interesting one.

This is where the computer-science part sneaks in

Underneath Roster Relay, the sports world is basically a giant network.

Each player is a point.

If two players appeared for the same franchise in the same season, there's a connection between them.

Once you represent the data that way, you can ask the computer to find the shortest route from Player A to Player B.

The standard technique is called breadth-first search, or BFS.

The name sounds more intimidating than the idea.

Imagine starting with one player.

First, check everyone he played with.

If the destination isn't there, check everyone those players played with.

Keep moving outward one layer at a time until you reach the other endpoint.

Because you're exploring the network in layers, the first route you find gives you the shortest number of connections.

That's useful for Roster Relay because I can use it to avoid puzzles that are either basically trivial or ridiculously sprawling.

The current generator generally looks for endpoint pairs whose shortest paths fall into a manageable range rather than simply accepting every possible matchup.

The player never needs to know any of this.

You can just type names.

I get to worry about the graph.

But shortest-path math has a weakness

Sports networks are not evenly shaped.

Some players are vastly more connected than others.

A player who spent 18 years with one team already has a lot of teammates.

A player who spent 18 years bouncing around eight teams becomes a human interchange on the interstate system of sports history.

That means a mathematically short route may be short for a boring reason.

Imagine almost every interesting MLB matchup eventually collapsing into:

Player A → Guy Who Played Everywhere → Player B

That's valid.

It also makes every puzzle start feeling the same.

So the generator does another check.

It looks at some of the most highly connected players in the network — the big hubs — and temporarily removes them.

Then it asks:

Can I still connect these endpoints in roughly the same number of steps?

If yes, I like that matchup more.

The route isn't dependent on one giant shortcut.

In the code, I call that being hub-resistant.

Which sounds like something I'd want my home Wi-Fi to be.

Hub-resistant does not mean hub players are banned

This part is important.

I don't want to tell somebody:

Sorry, Jamie Moyer is too useful. You are forbidden from remembering Jamie Moyer today.

Players can use whoever makes a valid connection.

The hub-resistance check happens when choosing the puzzle, not when policing the player's route.

It's really about making sure the endpoints offer possibilities beyond the obvious shortcut.

If you want to use LeBron every day, use LeBron every day.

I may silently wish you would get a little more adventurous.

But I'm not your boss.

I also don't want to show you yesterday's puzzle backward

Another easy way to make puzzle generation look more varied than it really is would be to reuse the same endpoints in reverse.

Yesterday:

Player A → Player B

Today:

Player B → Player A

Technically different direction.

Obviously the same puzzle.

So Roster Relay treats endpoint pairs as unordered.

Once A and B have been used together, flipping them doesn't make the matchup new again.

Individual endpoint players also get a cooldown before they can appear again.

The current generator uses 14 days.

That's not because two weeks is some sacred law of sports-puzzle design.

It's just long enough that opening the game shouldn't feel like:

Oh. This guy again.

Variety matters across a week too

There are lots of technically excellent endpoint pairs.

If I picked them independently, though, I could still end up with a weirdly repetitive week.

Maybe every route leans heavily on the same franchise.

Maybe the endpoints all come from roughly the same era.

Maybe every puzzle feels like the exact same kind of sports-memory test.

So the generator also considers things like era fit, endpoint recognition, hub resistance and franchise diversity when ranking candidates.

This is one of those areas where the goal isn't to mathematically prove:

THIS IS THE MOST FUN POSSIBLE PUZZLE FOR AUGUST 31.

That would be an impressive claim.

It's more about preventing obviously repetitive choices.

The computer narrows the field.

Then there's still room for judgment.

The sports themselves behave differently

This is also why generating one puzzle algorithm for MLB, NBA and NFL doesn't mean the games all feel exactly the same.

Basketball rosters are smaller.

Baseball careers can stretch forever.

Football rosters are huge, but careers are often shorter and player movement works differently by position.

The eras behave differently.

The famous connectors behave differently.

The pool of players a normal fan might recognize is different.

I personally follow those three sports, which is also why those are the three Roster Relay supports.

People have asked about hockey and soccer.

I'm not against them.

I just don't follow those sports closely enough to pretend I currently have great instincts about what makes a satisfying NHL or Premier League puzzle.

If Roster Relay ever gets big enough that people are banging down my digital door demanding hockey, I'll happily revisit that.

That's a pretty good problem to have.

Sometimes the generator is stricter than I am

One thing I've learned building daily games is that automation needs to be willing to say no.

Roster Relay keeps track of previously published puzzles when generating future ones.

It checks endpoint pair reuse.

It checks endpoint cooldowns.

If the history can't be loaded, the generator is designed to fail rather than quietly create a puzzle that might violate those rules.

This is probably more discipline than anyone expects behind a game where one of the strategic options is remembering a backup running back from 2013.

But repetition is one of those things players notice quickly.

You may not consciously think:

Hmm, endpoint diversity appears statistically suboptimal this month.

You'll just feel like you've seen the same guys lately.

That's enough.

And then I still have to look at the puzzle

Just like Yearbook, generation isn't the same thing as publication.

A route can score well by all the automated criteria and still make me wonder whether it will actually be fun.

Are the endpoints recognizable?

Does the matchup span sports eras in an interesting way?

Is there room for multiple plausible strategies?

Will somebody have a satisfying “oh yeah” moment with one of the connectors?

Or is this technically valid but kind of dull?

Those are hard things to reduce to one number.

I don't particularly want to reduce them to one number anyway.

The generator's job is to search a massive space of possibilities and avoid the obvious bad patterns.

My job is still to look at what comes out and decide whether I like it.

I don't want Roster Relay to have one correct strategy

This is ultimately what all of these rules are protecting.

I don't want you to open the game and already know your first move before seeing the endpoints.

I don't want every MLB puzzle to become Jamie Moyer Simulator.

I don't want the same endpoint stars cycling through every few days.

And I don't want the game to become so obsessed with optimal routes that remembering a deeply random player stops being useful.

The fun for me is that you can see two athletes and start rummaging around in your memory.

Maybe there is an obvious route.

Maybe there isn't.

Maybe the player who finally unlocks it is someone you haven't thought about since you were playing fantasy football 12 years ago.

And maybe you decide to ignore the shortest route entirely because you just remembered somebody better.

That's fine.

The puzzle generator is there to make sure you have enough room to do that.