Rep.-elect Dan Bishop (R-N.C.) waited to speak with President Trump after defeating Democrat Dan McCready on Tuesday. (Nell Redmond)

The results of the special election in North Carolina’s 9th Congressional District on Tuesday didn’t change between about 8 p.m., when polls closed, and a bit after 10 p.m., when the Associated Press called the race for Republican Dan Bishop. All that transpired over the course of those two hours was that the votes were actually counted, yielding some of the artificial drama for which election nights are known.

Election nights create this sense that something is happening, that race horses are jockeying past one another, when in reality all that’s happening is that state officials are slowly revealing the final score. The randomness with which that happens leads to all of the internal drama. If they happen to get all of the votes from areas that were strong for Candidate A before they get the votes from an area strong for Candidate B, it will look like Candidate A had a big lead and that Candidate B came from behind. But that was never the case — at least not on Election Day.

Imagine if we revealed the results of the Super Bowl like that. Let’s use the 2018 contest as an example here since, well, that’s the example I created last year when I was whining about the same issue.

Did it seem like the New England Patriots were making a comeback? That the Eagles had the game well in hand all along? It’s all a function of the randomness of presenting the score. The tension of the game depends on the way in which the points are allocated — but the Philadelphia Eagles always win by the same margin.

This is an important point these days in part because of President Trump’s predilection to spin election results in a way that casts him in a positive light. The results of elections aren’t changed by how votes are counted, but waiting for votes to be counted can allow narratives about the race to be set — and for those narratives to be used for political purposes.

On Tuesday, Bishop beat Democrat Dan McCready by nearly 4,000 votes. Thanks to how the vote was counted, though, McCready led until about 9:09 p.m. He’d built up a big advantage with the early vote, which was then eaten away steadily by Bishop. (Forty-eight percent of McCready’s vote came through early voting, compared with 38 percent of Bishop’s.)

The counting looked like this.

(Philip Bump/The Washington Post)

Keen-eyed observers will notice a bit of an aberration: Around 8:30, the Associated Press included incorrect figures for results from Union County, giving both candidates tens of thousands more votes there than they should have. A few minutes later, the mistake was corrected.

That aside, the broad trend is clear. Bishop trailed at first but, as votes were added, led. After the early vote came in, Bishop steadily gained ground against McCready.

Most of the vote came from two counties: Mecklenburg and the aforementioned Union. McCready won the former by 12 points; Bishop won the latter by 21.

(Philip Bump/The Washington Post)

Breaking out the vote totals for each by county, you can see how much of Bishop’s total came from Union and how much of McCready’s from Mecklenburg.

(Philip Bump/The Washington Post)

(The light blue county, Robeson, is interesting. It overwhelmingly voted for McCready in 2018 but, after that election was thrown out, backed him by a much narrower margin on Tuesday. And, again, notice the Union County glitch.)

There’s a reason that those results by county are so important. Since two-thirds of the vote came from those counties, tracking how much of the vote in those places was still outstanding would allow a savvy observer to take a shortcut to the final result Tuesday night. If you can figure out how many votes are remaining in those counties and how they’d likely break, you can get a sense for just how close the race actually was.

Coming into election night, it was obvious that most of the vote would come from Union and Mecklenburg counties. After all, we have any number of other elections to look at, and, of course, we know where people live. What wasn’t entirely clear was how heavy turnout would be. Would the part of Mecklenburg that’s in the Ninth District cast 109,000 votes, as it did in the 2016 presidential contest? Or would it be closer to the 96,000 cast last year?

The most immediate guide we have to the number of votes that have been counted as election night progresses is the “precincts reporting” metric that always sits alongside early results. If you are tempted to share the results of an election with only, say, 10 percent of precincts reporting, you should add the important caveat that the numbers you’re conveying are essentially useless for any practical purpose. Like sharing the results of the Super Bowl game after the first two points were allocated.

Thanks to early voting, the percentage of votes that were cast in each county was higher than the percentage of precincts reporting at every point Tuesday night. That’s not necessarily the case; if the first 10 precincts to report in a county are rural and the other 10 are urban, the percentage of precincts reporting (50 percent) will likely be higher than the percentage of the eventual vote total those precincts contained.

Generally, though, the two metrics tracked with one another about an hour into the counting Tuesday night.

(Philip Bump/The Washington Post)

That’s useful to know as vote counting progresses because it allows us to figure out how much of the vote is still outstanding.

Over the course of the night, here’s how Bishop’s lead/deficit progressed. You can see the point just after 9 p.m. when he gained the lead for good.

(Philip Bump/The Washington Post)

There’s a simple calculus we can use to figure out how many votes remain from a county on election night. Let’s use Union County as an example.

At 8:30 p.m., about 31 percent of precincts had been tallied there. Bishop and McCready had recorded 19,993 and 15,152 votes, respectively — a total of 35,145 votes. Of those votes, 27,003 were cast through early voting, votes that aren’t included in the precinct numbers. In other words, with 31 percent of precincts reporting, 8,142 votes had been cast in the county. Some back-of-the-envelope math suggests that a total of about 26,260 votes would be cast in polling places in Union County, including those 8,142.

It was a bit later when the first votes came in from Mecklenburg. Once those came in, we could estimate all eight counties. At about 9:06, some 45,000 votes were likely still out. As more votes came in, that number shrank.

(Philip Bump/The Washington Post)

We know something else, though: how each county was voting. At 8:30, Bishop led in Union County by about 14 points. That would suggest that he’d net a little over 2,500 votes in the county by the time voting ended, using our estimate of how many votes remained. That was a bit less than half of the votes he needed at that point.

If we apply the same math across all eight counties, we can get an estimate for how many votes Bishop was likely to see come in from the outstanding precincts. That figure changes over time as more results come in and margins narrow or widen — and depends on what’s still outstanding.

(Philip Bump/The Washington Post)

Because Mecklenburg was the last county to complete its count and because Bishop fared worse there than in other counties, the outstanding vote leaned against Bishop for most of the night. (See the light red line below.) But because he had earned so many votes in other counties, by about 9:45 p.m. it was likely that anything remaining to come in wouldn’t be enough to cost him his lead. (The dark red line.)

At about 10:10 p.m., the AP called the race.

(Philip Bump/The Washington Post)

This was a relatively straightforward race, but even here there are land mines. Knowing which precincts in each county have reported and which haven’t allow for a more refined expectation about what’s still likely to come in and how it will vote. In case you’re one of those people who likes to know who won a few minutes before everyone else.

We must reiterate the central lesson here, though. The counting itself didn’t change the result. When polls closed shortly before 8 p.m., Dan Bishop had more votes than Dan McCready, by about 4,000 votes. It just took a few hours for everyone to learn that.