howbadisthetrain

NYC · methodology

How the scores work

The full picture of what each line's score means, what data feeds it, and where the line between signal and snark lives.

The score

Every line gets a number from 0 to 10, one decimal. Higher is better. The number is a deliberate vibescore, not a literal statistical model — it's built to communicate "should I get on this train right now or grab an Uber?" in a single glance.

Each score is a blend of:

  • Service status. Is the line running normally, delayed, suspended, or rerouted? This is the single largest input.
  • Crowding.How full is the next train, on average? Crowding is the line's normal rush-hour state plus any current spike.
  • Planned work. Weekend reroutes, late-night service changes, and track maintenance get factored in.
  • Alert count. Open MTA alerts for the line in the last hour, weighted by severity (signal problems hit harder than a debris report).
  • Historical adjustment. Lines that are chronically bad (looking at you, L) start a few points lower. Lines with a reputation for reliability (the 7, the Q) start higher. This is intentional and disclosed so a 7.4 means what riders expect, not "the literal mathematical answer."

Current status: stub data

What you're seeing right now is stub data, not the live MTA feed.We've shipped the scoring math, the per-line pages, and the layout against a hand-curated set of scores (one per line) so the design could be reviewed against the real shape of the data. The MTA GTFS-realtime integration is the next planned build.

Until that ships:

  • Scores don't change when you refresh the page — they're baked in at build time.
  • The "NYC · live" tag on each page refers to the eventual feature, not the current one.
  • Alerts, planned-work flags, and labels are static. Don't make a real-life decision off them.

What changes when the real feed wires up

  • ISR revalidation drops from hours to ~60 seconds, and the home list reorders itself as live data shifts.
  • Each line's score recomputes every time the MTA feed changes, blended with the same historical baseline so the numbers stay recognizable across days.
  • The label under each score updates to reflect the current state (delays, planned work, normal service) instead of being a fixed one-liner.

How the labels are written

The one-line blurbs under each score are written by a human (us), not generated. The tone is dry, occasionally snarky, and firmly on the side of public transit — if you're reading a line we said is "bumper-to-bumper, too many humans in a tin can, you know this," that's a real L train observation, not a made-up complaint.

We try not to editorialize on ridership in ways that read as class-coded. The F is not a "scary" line; the L is not a "broken" line. They're transit lines with capacity and reliability issues, and we describe them as such.

Driving comparison numbers

The "vs. driving" cost and time estimates on each line page are rough, not measured. Uber and parking costs vary wildly by borough, time of day, and whether you're a regular or a first-timer. Treat them as an order-of-magnitude nudge, not a quote.

What this site does not do

  • No account creation. No login. No cookies set by us.
  • No third-party tracking scripts beyond what Google AdSense sets (and AdSense only loads when this site has ads enabled).
  • No selling or sharing of any data we collect — and we collect almost none. See the Privacy page for the full list.

Questions or corrections? Get in touch — we read every email.