Batting 8th

GEORGE GEORGE

Does the card match the record?

The eighth spot often goes to the catcher. Glove first. The one guy who sees the whole field and keeps the book on every hitter.

This one has no agent in it. Across the top of the scorecard, in my grandfather's hand: GEORGE GEORGE. Then 1st, circled. Then the names: Georgie. George. Roger. And me. Three generations of Georges on one card, and the card is the first row in everything the rest of the lineup queries.

The archive Retrosheet box_score.py BigQuery

The game. Sunday, June 10, 1984. Bat Day. Blue Jays at Yankees, 5–3. My first game. Rawley started, Christiansen got the win (Poppa circled him), Righetti saved it. Mattingly homered in the third, Gamble in the sixth. 41,018 people, and four of them were us. Uncle Roger came along, and as far as the record knows, it's the only game I ever saw with him.

Left: a generated AP-style box score, Yankees 5, Blue Jays 3, June 10, 1984. Right: Poppa's handwritten scorecard from the same game, GEORGE GEORGE and '1st' circled at the top
Left: the card, pencil, 1984. Right: the box score a script drew from Retrosheet's play-by-play in 2026, in the AP agate style the newspaper would have printed the next morning. Poppa's Rawley line and the generator's agree to the digit. The box score beside the card is the viz here.

#What's in the system

178 games, 22 ballparks, 400 home runs. The full stat sheet is in the game notes.

Who I went with, top five: Melissa 57, Bergan 27, Al 26, alone 16, Poppa 14. First names only, by rule. Poppa is on fourteen of the cards and kept score at most of them. The names were 101 different spellings before a cleanup pass made them 84 people. And a simple check, two values in one row can't be one person, caught six wrong game ids that had survived 41 years of copying. That check became the model for every gate an agent has to pass later.

The lineage runs backward from here. Tickets and programs and scorecards were the source I typed into a baseball-tracking app twenty-some years ago. The app exported to a spreadsheet. The spreadsheet became a BigQuery table. dbt modeled it. The agents stand on that. Scanning the cards closes the loop: it brings the physical artifacts back into the pipeline they seeded. This is not a data project. It's a multigenerational family archive that happens to be queryable.

#The card and the record

Thirteen cards are scanned so far, from a shoebox of fifty to a hundred. Eleven of them match a game in the 178. Two don't, and the rule for those is simple: if Poppa's card has a date that isn't in my games, it's a game he went to without me, because he'd surely have written “Georgie.” One of the two is July 7, 1991. “Williams CF” is scored in the Yankees lineup. Bernie Williams's major-league debut, in my grandfather's pencil, at a game I wasn't at. That one mattered to us. The Albany-Colonie Yankees, Double-A, were our local team, and we'd watched a lot of kids come up through there. Bernie played for them in '89 and '90, with Buck Showalter managing. It stays in the archive and out of the data.

The box score above is generated. box_score.py takes any of the 178 game ids, pulls the play-by-play from Retrosheet, and renders the agate the way the AP wire would have. Batting lines, pitching lines, the line score. Set it beside the card and you're looking at two records of the same afternoon kept forty-two years apart by two different methods, and they agree. That agreement is the whole argument for writing things down.

Of the 30 playoff games, eight are from 2001: every home game of the Division Series and the League Championship Series, and World Series Games 3 and 5. So the President's first pitch in Game 3 and Brosius's ninth-inning home run in Game 5, in person. Jeter's “Mr. November” walk-off was Game 4. I watched that one on TV like everyone else. The data knows the difference, and so does the card.

#From the shoebox

The 1984 Yankees Scorebook and Souvenir Program, Yogi Berra on the cover
The 1984 Scorebook and Souvenir Program from my first game. A dollar, tax included, Yogi on the cover. Sixteen games into the next season he was fired, and he stayed away from the Stadium for nearly fifteen years. When he came back, on July 18, 1999, he caught the first pitch, and David Cone threw a perfect game. Page 42, “How to Score,” closes out the lineup.

#Try this

Find the oldest record you have of anything you care about. Check one row against the official source. If they agree, you've got a clean dataset. If they don't, you've got a story.

#What it taught me

  1. The hand-kept card was the first clean dataset. One row per game, one hand, one method, kept in real time by someone who cared whether it was right. Every governed definition in the contract is trying to be what that card already was.
  2. Provenance, not source. The cards don't feed the data; Retrosheet does. The cards are how you know the data is about something that happened to someone. An OCR pass would be low priority for exactly that reason.
  3. When a value looks odd, suspect a 1980s pencil before a mystery person. Some of the attendee names in the raw file are machine transcription of these cards. Knowing where your data came from is still the skill.

Next, batting 9th: Why do people like us keep score? →