She had 1,696 games. We told her she had ten.

A player came back to chess after two years away, and three separate parts of this product decided she was not worth a sentence. None of them was wrong on its own terms.

A timeline of one player's games: a dense band of play from September 2022 to May 2024 holding 1,696 games, then a long flat empty stretch to September 2026, where a single mark says she came back

On the evening of 10 September a player landed on eloist.com and made an account eighteen seconds later, on her phone. Two minutes after that she connected her chess.com account. By every measure we use, that is the best start a signup can get.

Her archive came back at 1,696 analysed games, played between September 2022 and May 2024. She had not played since. She had come back to chess, and she had come to us first.

What the page said to her

The largest numerals on her dashboard read 1,696/25. Twenty-five is the free tier's analysis allowance, and the card that shows it was written as “analysed of target”. Nobody had designed for the case where the number on the left is larger than the number on the right, because until that evening we had never met it.

Under it sat a sentence: “Every move of your 25 most recent games, scored.” Accurate, and no use to her. Her twenty-five most recent games were from May 2024, and nothing on the page said so.

Further down, where the charts go, the page said: “10 games so far. The charts need 20.” The check that decides whether there is enough data to draw a chart was counting games in the recent window rather than games in the archive. So a player holding 1,696 analysed games and a two-year gap was told she had almost nothing.

She typed her name in again

At 18:16 she went back to the connect screen and retyped her chess handle. She got a picker, chose nothing from it, and left. We all know what that is. It is what you do when you are sure the machine did not hear you.

Her first insight landed 51 seconds after she left. Her full archive finished 92 minutes after she left.

Two more systems agreed with the first

We queued a welcome film for her at 18:19 and it failed 40 seconds later. The film pipeline required a game inside a fourteen-day window and she had none, so the job stopped and sat in an error state. Nothing told her a film had been attempted. Nothing told us to go and look.

Her welcome letter never went either. The welcome template composes to nothing for a member who has already linked an account, on the reasoning that there is nothing left to ask them to do. She had linked one at 18:09, so the letter came out empty, we suppressed it, and her welcome slot was spent on nothing. During the one hour she was most likely to read anything from us, we sent her nothing.

Three systems decided independently that she had nothing worth hearing, and not one of them was wrong by its own reasoning. The dashboard was right that she had not played recently. The film pipeline was right that it had no fresh game to narrate. The letter was right that she had already connected an account. Together they told a member with 1,696 games in our database that she had ten.

Everything is measured from yesterday

That is the part worth writing down, because it is not one bug with three faces. Recency is the default unit of nearly every surface a product has. A window is the last thirty days. A chart is this month. A count is “so far”. A greeting assumes you arrived this week. Each of those defaults is right for the player who joined yesterday and quietly insulting to the player coming back, and the player coming back is the one who needed a welcome.

Someone who steps away from chess for two years and then goes looking for a coach is not a thin-data problem. She is the most interesting reader we get. Her archive has a clear stretch of play in it, a long silence, and a decision to start again. The one thing we should never do is score her against a window she was never in.

What we changed

The date of a game no longer decides whether a film can be made. Viktor already knew how to narrate an old archive honestly. There is a mode where he says out loud that he went back through older games, and names the real month he is looking at. That mode had never once run, because a date cut removed the games before the code that chose the mode could see them. Her film exists now, and it opens by naming 2023.

The dashboard recognises a returning player. It names what she actually did and what she stopped doing, in place of a score against the last thirty days.

The engine card drops the denominator once the analysed count passes it, and the sentence underneath now describes the games it is actually about.

The durable one is a build gate. The build fails if any member-facing string claims recency about content that is not recent. Subject lines are in scope, which is how a letter about games from 2023 went out saying “this week”.

We have not written to her about any of this. A letter saying “we noticed you came back and we got it wrong” is a letter about us. What she gets instead is a film that knows her games are old and says which year they are from, and a page that reads like it has been paying attention. If you have an archive with a gap in it, that gap is now the most interesting thing about you here.

Bring your archive, gap and all