ORCHARD PARK – On the surface, simply based on the numbers the Buffalo Bills put up in 2019, their offense was better than it was in 2018, so I guess that constitutes some type of progress.

But the reality is this: Despite clear upgrades at wide receiver, running back and offensive line, the Bills’ offense was again maddeningly inconsistent and sometimes impotent in quarterback Josh Allen’s second year. It remains an area of concern as the 2020 offseason begins.

“Offensively, we did show some improvements,” said general manager Brandon Beane. “Josh improved, and we scored more points, but at the end of the day we didn’t score enough points.”

Beane said the Bills wouldn’t have won 10 games this season without Allen, but how true is that statement? There’s no denying that Allen showed an ability to rescue games late, delivering five game-winning fourth-quarter drives, but there’s also no denying that he — and the offense as a whole — was often the reason why the Bills needed to rally to win games.

The Bills failed to reach 20 points in 10 games counting the playoff loss to Houston and they went 3-7 in those games. No matter how good your defense is, and Buffalo’s was certainly outstanding, it’s hard to win scoring so few points.

Allen and company did not get to 20 points in any game since Thanksgiving when they erupted (please note the sarcasm) for 26 against Dallas. Incredibly, those 26 points were their fourth-best output as they had 28 against the Giants, and 31 and 37 against the Dolphins. And even in the first Miami game, seven points came from the special teams.

True, the Bills’ scoring average went up from a paltry 16.8 per game in 2018 (how could it not?) to 19.6 this year. meaning they improved from 30th in the NFL to 23rd. They averaged 330.2 yards per game compared to 298.6, so they went from 30th to 24th in the league. And the passing game went from 31st to 26th as they jumped up from 174.6 to 201.8.

Improvement, yes, but that’s just not good enough, and the only way it will improve in 2020 is if Allen takes some big strides, and Beane can continue to add talent to the roster.

“I’m as convinced today as ever that Josh can be a better version of himself next year,” said Beane. “It’s hard to play quarterback, it’s the hardest position and I know everyone here and obviously everyone in this community is focused on our quarterback. But I study quarterbacks from other teams as well and see how they do. And I’m very proud of where Josh is at.”

Here are my grades for the offense:

Quarterback: C

Allen increased his adjusted completion percentage (which subtracts spikes, throwaways, drops, and hits as the QB was throwing) from a woeful 64.7 percent as a rookie (30th in the NFL) to 71.7, but that was still only 22nd in the league.

Among the QBs who ranked ahead of Allen in this telling category were rookies Kyler Murray and Daniel Jones, plus Sam Darnold, Ryan Fitzpatrick, Kyle Allen, Jacoby Brissett and, yes, Tom Brady.

Now, on the positive side, Allen’s passer rating went way up from 67.4 to 85.3 because he cut his interceptions from 12 to 9, raised his TD passes from 10 to 20, and threw for 1,015 more yards. Also, he remained a dual threat as he rushed for 510 yards and another nine TDs. His 29 total TDs (passing/rushing) ranked sixth behind only Lamar Jackson, DeShaun Watson, Russell Wilson, Jameis Winston and Dak Prescott.

Beane acknowledged Allen is an unfinished product who has to grow and mature. His accuracy, ball placement, decision-making, and reading coverages lag behind the majority of QBs, and his mechanics continue to break down in key moments. But there is a base upon which to build for what will be a critical-to-his-future 2020 season.

Running backs: C+

The Bills ranked eighth in the league in rushing yards per game (128.4), but one-fourth of their 2,054 yards came from Allen. This is a grade for running backs only, and as a group, the Bills were average, though that was more the fault of the coaches.

Rookie Devin Singletary had a solid year as he rushed for 775 yards and caught 29 passes for 194 yards, while his 5.1 yards per attempt tied Tennessee’s Derrick Henry for No. 1 in the NFL among running backs. Unfortunately, due to a hamstring injury and lack of usage, Singletary had 143 fewer rushing snaps than Henry and was 26th among all backs.

The insistence on keeping Frank Gore involved was beyond bizarre. Gore finished with 15 more carries than Singletary, and he averaged 1.5 yards fewer per attempt. In the second half of the season, he looked every bit of his 36 years old, and then in the loss to the Texans, his inability to gain yards on all but one of his eight carries helped kill the Bills.

Not playing T.J. Yeldon in place of Gore in the second half of the year seemed somewhat ludicrous. Despite being inactive for 10 straight games, Yeldon had as many receptions (13) as Gore on 255 less snaps.

Wide receivers: C+

The additions of John Brown and Cole Beasley, who essentially replaced Zay Jones and Robert Foster, provided a massive boost in terms of combined catches (139), yards (1,838) and touchdowns (12). Jones and Foster in 2018 totaled 83 receptions, 1,193 yards and 10 TDs.

However, the production would have been so much better had Allen taken full advantage of his new weapons. Brown, a legit deep threat, had 1,060 yards, but caught only 10 of 27 targets of 20 yards or more downfield. He gained 20 yards or more on just 17 of his 72 catches, and only three of those went for 40-plus.

I thought Beasley was underused all season, and that has to change in 2020. He had only 99 targets (I had him pegged for 150-160 total before the season began) and his 67 catches produced only 37 first downs. On plays where he was in the slot, which is his natural position, he ranked only 12th among all slot WRs with 48 catches.

Beasley figured to be a go-to receiver on third down, yet only 21 of his receptions came on third down, a respectable 21st in the NFL, but it should have been more.

After those two, it was a precipitous drop to Isaiah McKenzie (27 catches, 254 yards) though several of those were nothing more than jet sweep tap passes. Duke Williams, Andre Roberts and Foster gave the Bills almost nothing (combined 18 catches for 250 yards).

Tight ends: D+

Dawson Knox had some wow plays as a rookie, but he had far more head-scratchers in finishing with 28 catches for 388 yards and 2 TDs. He ranked 36th among tight ends in receptions but he led all tight ends with nine drops, three more than runner-up Jason Witten who came out of retirement to play for the Cowboys.

Knox needs plenty of work as a blocker, too, but if he cleans up his ball-catching he’s a player who possesses real potential.

Tyler Kroft, the big free agent signing, had a complete bust of a season. Foiled by early injuries, he never got his footing (literally) and made only six catches for 71 yards, with one big TD reception in the Pittsburgh game. The Bills have to hope he can rebound in 2020, or that signing will be dubious.

Lee Smith led all NFL tight ends in penalties with eight, remarkable in that he played only 30.5 percent of the snaps. He’s still a good blocker and a great locker room guy, but with rookie Tommy Sweeney waiting in the wings, you have to wonder if Smith will be back in 2020.

Offensive line: B

There were four new starters — LG Quinton Spain, C Mitch Morse, RG Jon Feliciano, and RT Cody Ford — all of whom represented an upgrade from the man they replaced. Then you factor in that the lone returnee from 2018, LT Dion Dawkins, had his best season yet and it was certainly a nice year for the boys up front.

The Bills had tremendous cohesion because only rotational RT Ty Nsekhe missed full games, six in all. The five starters played every game, and the only player not under contract for 2020 is Spain, who wants to return, so the line will have a chance to keep growing.

In terms of pass protection, Pro Football Focus ranked the Bills 12th in their efficiency ratings, and they pinned blame on linemen for only 17 (10th-fewest) of the 40 sacks absorbed by Allen and Matt Barkley.

There is room for improvement in the run game. The Bills ranked only 14th in yards per rushing attempt, and that was including Allen’s scrambles. There were some point of attack problems, and that was partially why Gore was so ineffective after midseason.

Another area of concern was penalties. The Bills led the NFL with 64 offensive penalties, 31 of which were pre-snap which was second most. The linemen committed 35 infractions including 22 for holding.

Kicking/Returns: B+

As far as the offensive special teams — Stephen Hauschka’s kicking and the kickoff and punt return game — the Bills fared well under first-year special teams coach Heath Farwell.

Hauschka caught some heat when he made just eight of 13 field goals in the first 10 games. But after a two-miss game that contributed to the loss in Cleveland, Hauschka made 18 of 19 counting the playoff game, a big finish. He also made 30 of 32 extra points.

His 42 touchbacks ranked tied for 19th, but he ranked 11th with only 42.5 percent of his kickoffs returned.

Andre Roberts was brought in to ignite the return game, and despite limited opportunities and no touchdowns, he did that. He ranked fourth in kickoff return average at 26.6 yards, and ninth on punt returns at 8.0.

Long snapper Reid Ferguson was perfect, not a single muffed snap on punts or placekicks.

MAIORANA@Gannett.com