A fictional shop writing about method. No picks, no lines to act on, and nothing here is betting or investment advice. What this is.

The Gate Built for One Sport, Applied to Four

The gate started as a basketball problem. We needed a fast, reliable way to confirm that a player was expected to feature in a game before we spent any time scoring them — not just rostered, not just healthy, but actually in the rotation for that night. In basketball that distinction is meaningful. A player can be available, dressed, and still log four minutes because the coach decided the matchup called for someone else. We built a gate that checked for recent minutes patterns and flagged anyone whose last three appearances looked like deliberate reduction rather than injury. It worked. We were pleased with ourselves, which should have been the warning.

About four months later, Dani pointed out that we were running the same gate, largely unchanged, on baseball, hockey, and soccer candidates. Not because we had decided it translated — because nobody had decided it didn't. It had been copied into the pipeline during a period when we were moving fast and the copy felt harmless. "It's just a participation check," someone said. That sentence has preceded most of our worst decisions.

What followed was several weeks of pulling apart a gate we thought we understood and discovering that it was doing different things in different sports — some of them useful, some of them noise, and one of them actively wrong in a way that took longer than it should have to name.

Manage All Your AI API Keys in One Place

Securely manage keys for 60+ AI providers in one encrypted vault instead of juggling them across apps.

Learn more

Why a Basketball Gate Has No Business in a Baseball Lineup

The original gate had two conditions. First: the player must have appeared in at least two of the last five games. Second: their per-game minutes over those appearances must not have declined by more than a set threshold in consecutive games — the pattern we associated with managed reduction. Both conditions were calibrated against basketball's rotation logic, where a coach's decision to pull someone from a closing lineup tends to show up as a gentle minutes taper before it shows up as a scratch.

Baseball does not have minutes. We had mapped the gate onto something called "plate appearances per game," which sounds equivalent and is not. A hitter's plate appearance count is largely a function of where they bat in the order and how long the game lasts — neither of which is a signal about the coach's confidence in them. A cleanup hitter who bats twice in a rain-shortened five-inning game looks, to this gate, like a player being managed down. They are not. We were closing the gate for the wrong reason and getting the right answer by accident often enough that we didn't notice.

Hockey was a different problem. The minutes-taper logic actually has some surface plausibility for ice time — coaches do reduce a player's shifts before scratching them — but our threshold had been set for basketball's pace and game length. A hockey player losing two minutes of ice time over three games was triggering the gate. Two minutes in hockey is a line change, not a demotion. The gate was too sensitive by a factor we hadn't bothered to calculate.

Soccer was the most embarrassing. The gate was passing players who had appeared as late substitutes — on the pitch for eleven minutes, technically featured, cleared by both conditions — and we were treating them as full participants. Each sport punishes you for different blind spots, and soccer punishes you for conflating appearance with involvement. A player who enters in the 79th minute is not the same as a player who started. The gate could not see that.

How We Tried to Patch the Gate Without Rebuilding It

The first instinct was to add sport-specific thresholds rather than sport-specific logic. Keep the same two conditions, adjust the numbers. For hockey, we widened the minutes-taper tolerance. For baseball, we switched the input from plate appearances to lineup position, which is a more stable signal. For soccer, we added a minimum-minutes floor — a player had to have been on the pitch for at least some portion of the match to clear the gate.

This bought us a few weeks of cleaner output. Dani ran a retrospective against six weeks of prior grades and the false-pass rate in soccer dropped noticeably. The hockey adjustment looked fine. Baseball was murkier — lineup position is more stable than plate appearances, but it is also set by the coaching staff and subject to the same kind of deliberate shuffling we were trying to detect in the first place. We had replaced one imperfect proxy with a different one.

What we had not done was ask whether the underlying logic — the minutes-taper as a signal of managed reduction — was actually valid in any of these sports, or whether it had simply been valid in basketball and we had never tested it elsewhere. We were patching the implementation without questioning the premise, which is a comfortable way to stay busy.

"We kept adjusting the dial without asking if the dial was measuring the right thing. That's not calibration. That's just turning knobs."
— Dani

The remark was about the hockey threshold specifically, but it applied to all of it. We had built a gate around a behavioral signal observed in one sport, and we were trying to make it fit four others by adjusting its sensitivity rather than its meaning.

What the Stretched Gate Cost Us Across Eight Weeks of Grades

We went back through the grading window. The gate had been running in its original basketball form on all four sports for approximately eight weeks before the sport-specific patches, and in its patched form for another six weeks before we pulled it for a full rebuild. Fourteen weeks of ratings that had passed through a gate we now knew was miscalibrated in at least three distinct ways.

The damage was not uniform. Basketball grades were fine — that was the sport the gate was built for. Hockey grades were noisier than expected but not systematically wrong; the over-sensitive threshold was letting some candidates through that should have been flagged, but the candidates it was incorrectly blocking were not numerous enough to shift the overall picture much. Baseball was worse. The lineup-position proxy had introduced a new correlation we hadn't expected: players hitting near the top of the order were passing the gate at a higher rate than their actual availability warranted, because top-of-order hitters tend to stay in the lineup longer and their position is more stable. We were over-representing a particular type of player, which meant our baseball corpus for that period was skewed in a way that took longer than it should have to catch.

Soccer was the worst. The minimum-minutes floor we had added was set at a number that felt reasonable — it came from a conversation, not a calculation — and it turned out to be too low. Players who had appeared as late substitutes were still clearing it. Our soccer grades for those fourteen weeks had a meaningful false-pass contamination that we eventually had to quarantine. We did not delete the grades; we flagged them and noted the gate failure in the record. That is the policy, and it is not a comfortable policy to execute when the grades in question are your own.

The honest accounting: we had one sport's gate running on four sports for the better part of a quarter, and we caught it because Dani noticed the copy in the pipeline, not because our calibration checks flagged it. The calibration checks would have caught it eventually. Eventually is not a satisfying answer.

What the Rebuild Actually Changed, Gate by Gate

The rebuilt gates share a structure but not a logic. Each sport now has its own definition of "expected to feature" derived from that sport's actual mechanisms rather than from basketball's rotation behavior translated through analogy.

For basketball, the original gate survived mostly intact, with one addition: we now distinguish between a minutes taper in the final ten games of a regular season and the same pattern at other times. End-of-season load management looks identical to a demotion in the data, and they are not the same thing. We had known this and not acted on it.

For baseball, we dropped the minutes-taper logic entirely. The gate now checks lineup position stability over a longer window — fifteen games rather than five — and adds a separate check for whether the player has been in the starting nine in at least ten of those fifteen appearances. This is a coarser gate than the basketball one, and deliberately so. Baseball's participation signal is noisier and we should be less confident in it.

For hockey, the rebuilt gate uses ice time but with a threshold recalibrated against hockey's actual distribution of shift reductions — a number we derived from the corpus rather than borrowed from basketball. It is a more defensible number. Whether it is the right number is a different question, and one we expect to revisit. The cost of a gate that looks right but isn't is familiar enough that we are not in a hurry to declare this one finished.

For soccer, we replaced the minutes floor with a start/substitute distinction that is recorded at the corpus level rather than inferred from minutes. A player who started is flagged differently from a player who entered as a substitute, and the gate treats them differently downstream. This required corpus work we should have done earlier. The reason we hadn't done it earlier is that it was tedious, and tedium is a real explanation for real failures even if it is not a satisfying one.

The gates now pass fewer candidates in all four sports. That is almost certainly the correct direction. Whether we have overcorrected is something we will find out through grading, which is the only way we find out anything.

The thing I keep returning to is that the gate worked in basketball because it was built against basketball's specific failure mode — the quiet demotion that precedes a scratch. Every sport has its own version of that failure mode, and they do not look alike. I am not sure how much of our other infrastructure was built the same way: carefully for one context, then copied into three others because the copy felt harmless. That is probably the next audit, and I am not looking forward to it.

Note: PlayerGem is a fictional analytics shop and these accounts are invented. Nothing here is a pick, a recommendation, or betting or investment advice, and the players, teams and competitions described do not exist.

Seven desks. The method, not the picks.

Start from the top