Early this year, when Republican Mark Harris called for a new election in North Carolina's disputed Ninth Congressional District, top-tier Republicans wanted little to do with taking his place on the ballot. They cited varying reasons such as work and family, but there also was a clear political reality at play: The Republican nominee would be running against a well-moneyed Democrat who had barely lost in a race that was now tainted by Republican election fraud. Why spend time and political capital on such an uphill climb?

On Tuesday, Dan Bishop showed why. The Mecklenburg Republican beat McCready in a race that was close — but not as close as the disputed Ninth District result last November. Bishop's win — and McCready's somewhat disappointing performance — should at least raise the eyebrows of Democrats looking ahead to the 2020 election.

Certainly if you're a Democrat, it's not hard to find solace in Tuesday's result. In a district that gave Donald Trump a 12-point win three years ago — and one that saw the president visit twice this year — McCready fell by just two percentage points.

The foundational elements of last year's Democratic blue wave didn't really change Tuesday. The suburbs continued to abandon Trump's party, turning what's been a solidly Republican district for decades into something resembling a swing district. That's troubling news for the president and GOP.

But this also is true: McCready, while not a dynamic candidate, ran a campaign that hewed to the Democratic playbook. He talked a lot about health care and the Republican threat to pre-existing conditions. He didn't talk a lot about Donald Trump. He campaigned vigorously and didn't make any blunders. And he lost by more votes, to a more flammable candidate, than 10 months ago.

In part that's because Bishop was a smarter campaigner than Harris, investing more energy in conservative districts and counties like Robeson, which McCready won last year but not Tuesday. More important, perhaps, was the message he carried to those conservatives — that he was running against liberals already in Washington who wanted to make structural changes to American government.

Bishop didn't say it nearly as politely. He called congressional Democrats "clowns" and socialists. But the message appeared to resonate with at least some N.C. Republican voters who've seen national Democrats veer to the left since November.

The leftward shift has continued with viable Democratic presidential candidates talking about breaking up big banks and tech giants, and about Medicare for All proposals that include the elimination of private insurance.

Liberals will argue that Americans voted for big change in 2018, which may be true, and in some cases such change may be a good idea. But pushing for fundamental, systemic transformation comes with a risk of unsettling moderate and conservative fence-sitters who might merely be troubled by the guy in the White House right now.

Bishop exploited that discomfort in rural counties Tuesday, and that strategy could be fruitful in 2020 swing states like Michigan, Wisconsin and Pennsylvania — and North Carolina. Are Democrats listening?

FROM AN EDITORIAL IN THE CHARLOTTE OBSERVER