Methodology

How we think about the consensus tier

Every player on every slate carries one of two tier labels: esa_verified (green pill) when ESA has independently verified the player’s status — through a platform’s confirmation, a league feed, a team feed, or any other source we trust — and platform_projected (blue pill) when no source has verified yet but at least one platform has published a projected starting position. The pill sits next to the player’s name on the slate and on the player-detail modal.

The two-label tier is the visible part. Behind it is a small set of decisions about how to summarize signal that arrives from multiple sources on different clocks. This post walks through how we think about those decisions.

The setup

DraftKings and FanDuel publish lineup intelligence on different schedules and to different schemas. ESA also ingests signal directly from sources upstream of the platforms — league feeds, team feeds, and other trusted publishers that announce player status before either platform processes it.

A starting pitcher might flip to Confirmed on DraftKings the moment the team posts the card while sitting at Projected on FanDuel for another twenty minutes. NHL goalies appear in DraftKings’ game-attribute starter signal the morning of; FanDuel often projects starters the night before based on rotation patterns. Independent feeds carry the news through their own channels, sometimes earlier than either platform.

Each source carries useful signal. None is complete on its own. A reader looking at a single source sees one publisher’s read of the slate.

The tier’s job is to take the union of available verification across all sources and present it as a single label per player.

Why two labels, not one or three

We considered three label sets and settled on the smallest one that captured the underlying state.

A single label would collapse confirmed and projected together, losing the certainty distinction. A three-tier set with a “model-derived only” bucket — for players no source has yet spoken about — was rejected because it would imply a reading the public sources do not provide. When no source has signal, the honest behavior is to fall back to the projection model itself without asserting tier coverage.

Two labels also map onto a clean binary visual treatment. Green for confirmation, blue for projection. We avoided color-overloading on a UI element that has to be read at a glance.

The propagation rule

The most consequential design choice is how the tier propagates across sources. When any trusted source has verified a player — a DraftKings confirmation, a FanDuel projected order flipping to confirmed, a league feed, a team feed — every instance of that player on every slate inherits the green pill, regardless of which platform’s draftables are being viewed.

The reasoning is that the underlying event — the team has posted its lineup — is publisher-agnostic, even though the signal arrives through different channels asynchronously. Treating each source as an independent oracle would be conservative but would understate what is publicly known. The single-source-of-truth sidecar that drives the tier holds all verifications on equal footing; whichever fires first propagates to both platforms.

The same logic runs for projections. A FanDuel projected order on the Yankees’ batters lights up the blue pill on every Yankees batter on the slate, regardless of which platform’s draftables are being viewed.

We have observed the propagation rule’s effect anecdotally rather than measured it systematically. When an independent ESA source verifies a player ahead of either platform, the green pill can reach a slate roughly fifteen minutes to an hour before the platforms’ upstream feeds catch up — not the platforms’ UI rendering, but the feeds they consume. The bounds here come from a small number of observed cases, not a full-season analysis.

What the tier does not encode

The tier is a description of what has been published. It is not a probability estimate, and we kept it that way deliberately.

A blue pill does not estimate the likelihood that a projected starter will actually start. That question is handled separately by an intraday delta job that detects scratches as they happen and zeroes the affected player’s projection. The two systems share nothing beyond the slate they describe; folding scratch risk into the tier label would couple them in a way that obscures both.

The tier also does not weight sources. A FanDuel projection and a DraftKings projection contribute to a blue pill with equal status; a DraftKings confirmation and an independent feed verification contribute to a green pill with equal status. Weighting one source more heavily than another would require a calibration the available data does not yet support — we have not run the analysis to justify a weighting and prefer to treat the union honestly rather than guess.

Patterns we observe

Running the tier across a season, a few patterns are stable enough to flag:

  • Tier coverage rises monotonically through the day as sources publish. Green pills tend to lag blue, and both lag the model’s own projection availability by a few hours.
  • A player can move from green back to absent if a source’s verification is retracted. This is rare but observed during late-scratch reversals; the sidecar refreshes hourly and reflects current state, not historical maximum.
  • On main slates, FanDuel typically posts projections earlier; DraftKings typically confirms first; independent feeds vary by league and team. The sources behave asymmetrically across the day, and the tier benefits from reading all of them together.

Limitations

The tier is structurally limited by the data the verification sources make available. If no source has spoken — neither platform, nor any independent feed — the tier has nothing to say. There is no model-derived label to fall back on. We have considered adding one (an “ESA-projected” tier sourced from the underlying projection model) but have not, because the projection itself already serves that role and the additional label would add visual complexity without new information.

The tier is also not predictive about late changes. By design, it reports what has been published as of the most recent refresh. A goalie who is declared the starter in the morning and then scratched at warmups moves from green to absent through a separate path (the delta job), not through any tier-internal prediction.

See it inside the product.

Get Started