Kyle Whittingham’s contorted and conflicted face said it all.

As the coach, alongside his victorious Utes, walked off his home field for the last time this season late Saturday night, his team having dispatched the Colorado Buffaloes by the count of 34-13, he seemed partly pleased, but far from satisfied.

His expression was perfect for the moment: half-happy, half-sad.

His team was half-everything.

If you are what your record says you are, the numbers were a proper reflection: level at 6 and 6.

Half-good, half-bad.

Half-full, half-empty.

Half-winners, half-losers.

On this occasion, half-Zack Moss, half-Troy Williams.

Whittingham had half a mind to do things the old way here — run the football down the mugs of the Buffs, and that’s exactly what he did. Moss had 26 carries for 196 yards, including a number of brutish efforts, beastly and beautiful things. There was a whole lot of that from the sophomore back. His two first-quarter TDs gave the Utes a lead they’d never lose.

That was half the story on this night.

The other half was Williams.

The senior quarterback started in place of the injured Tyler Huntley and made as much as he could out of his final — and to outsiders, unexpected — start at Rice-Eccles, throwing efficiently and effectively, and running, too, for a couple of TDs.

The score was 28-zip at the half … and it eroded later only a little.

Williams’ performance raised this question: Would the Utes have been better than .500 had the senior started all season long? It’s not a stupid debate. Huntley’s inexperience at times hurt his team, despite his obvious athletic abilities helping at others.

It’s all speculation because the evidence is inconclusive.

In other Huntley-injury-forced starts this season — against Pac-12 biggies Stanford and USC — Williams went 0 and 2. He won the Arizona game in relief and beat Colorado, making him … fittingly enough, 2-2.

All square. Half-and-half.

I dunno. You decide.

Colorado’s defense is not the best, but Williams and Moss made it look worse than it is.

By beating the Buffaloes, the Utes accomplished their majorly downgraded goal, a goal more than half of FBS teams meet, lacking the shine such an achievement once represented, a goal that says more than anything that your team didn’t absolutely suck.

It only half-sucked.

It was enough to reach their bowl goal.

“We’d like to do that to reward our seniors,” Whittingham had said somewhere in the forgettable stretch of his team losing six of seven games.

Which was … only a half-truth.

The person the bowl goal benefited the most was Whittingham himself.

Now, Utah would be granted an extra three weeks of practice, not to reward those seniors, rather to correct the missteps of 2017 heading into 2018, a season that in the wake of this smeared campaign cannot go halfsies again.

Give the Utes this: On Saturday night, they did not play half-assed.

They conjured some of what had been missing during the aforementioned losing skid — offensive efficiency and consistency, underscored by that plain willingness and ability to run the ball.

Yeah, part of the future was put on hold during this game when Huntley was put on ice.

One of the great mysteries this season, with Huntley at the controls, had been the Utes’ inefficiency in the red zone, when it comes to actually crossing the goal line.

With Huntley’s double-barreled talents, that should have been a strength. His inexperience, though, reared up too often.

Williams, aided by Moss, displayed little of that against CU.

Just calm and cool, punctuating a regular-season that really was … half-bad, and that might have been a whole lot more.

GORDON MONSON hosts “The Big Show” with Spence Checketts weekdays from 3-7 p.m. on 97.5 FM and 1280 AM The Zone.