By Sam McPherson

The San Francisco 49ers are a team desperate for a victory, and the team is playing well enough to win on a regular basis. The problem is that the 49ers just can’t seem to secure the actual victory in the end. Three weeks in a row now, they’ve come up just short against NFC West Division opponents, losing all three games by a combined eight points after Sunday’s 18-15 overtime loss on the road against the Arizona Cardinals.

READ MORE: Concerns At Mineta San Jose International Airport After Man Drives Into Secure Area

It was a similar scenario in Week 4 to the one the team faced two weeks ago in Seattle: the offense earned the lead late in a game where neither team could score a touchdown, but the defense got tired in the end and allowed the opponent to score the game-winning TD. San Francisco is definitely an improved team from 2016, even if it isn’t showing up in the win column yet. That has to be frustrating for everyone in the organization.

Offense: C+

Quarterback Brian Hoyer played with grit in this game, even if the 49ers once again failed to score a touchdown. His numbers were mediocre overall, but Hoyer got off the mat after being hurt and led the S.F. offense to the go-ahead score in overtime nonetheless. That has to count for something. Hoyer’s leadership and moxie helped the 49ers tremendously in this game, even though they didn’t end up winning it in the end.

As a whole, the offense rushed for 95 yards, with running back Carlos Hyde getting just 16 carries for 68 yards. He also had some trouble holding on to the ball. Hoyer’s 234 yards through the air on a whopping 49 attempts wasn’t a great showing, although clearly the Arizona defense was simply playing prevent defense against a struggling offensive unit. Hoyer completed passes to eight different receivers.

The problem comes down to the offense hurting the defense by not scoring TDs and by not possessing the ball enough. Even with the dominant time of possession in overtime (over seven minutes for the 49ers in the 10-minute period), San Francisco lost the overall time of possession battle by three minutes. That may not seem like a lot, but it’s warm in Phoenix—even for October. Many teams over the years have collapsed in the desert heat.

Defense: B+

This would have been an “A” grade if the defense had been able to hold the Cardinals down in overtime. However, it’s hard to make excuses for giving up that seven-play, 75-yard TD drive that won the game for Arizona with little time left on the clock. So on one hand, the 49ers wouldn’t have been in position to win if not for the defense, but it was the defense that ultimately cost San Francisco its first win of the 2017 season.

READ MORE: Sonoma Co. Wildlife Refuge Asks Public's Help To Rescue Cubs Orphaned By Caldor Fire

Up until overtime, the 49ers had done a good job keeping the Cards in check (under 300 yards in regulation time). But the key penalty on safety Jimmie Ward for interference on a 2nd-and-20 towards the end of the overtime drive really hurt San Francisco. That gave the Cards new life, and they scored the winning TD soon thereafter. It was a near-stellar effort by the defense, even though it ended in heartbreaking fashion (again).

The 49ers sacked Arizona QB Carson Palmer six times, and five different players got those sacks—the seemingly ageless Elvis Dumervil had two of them, after registering just three in eight games last season with Baltimore. This San Francisco defense is definitely one of the better units in the league, even if they’ve wilted late in games twice this season already. Considering the injuries, this 49ers defense is playing very well right now.

Special Teams: A

Placekicker Robbie Gould nailed all five of his field-goal attempts, and he would have been a hero of the game if the 49ers had won. Punter Bradley Pinion boomed seven kicks for a 48.4-yard average, dropping three of those inside the Arizona 20-yard line. Kick returner Victor Bolden was solid on three returns (25-yard average), as was punt returner Trent Taylor (10-yard average on four returns).

Coaching: B

Arizona head coach Bruce Arians is one of the best in the business, so it’s not shameful to state that S.F. head coach Kyle Shanahan was out-coached in this game—just like in Week 2 against Seattle head coach Pete Carroll. Shanahan will learn on the job, but his offensive genius isn’t showing up on the field yet with any consistency, and the play calling is downright pedestrian. It’s hurting both units: offense and defense (as noted above). However, as we pointed out after the Week 3 loss to the Los Angeles Rams, the 49ers are playing hard and with passion, something that was lacking in 2016. The wins will come for this team and this coach.

Up Next: Indianapolis Colts

MORE NEWS: Bay Area District Attorneys Settle With Ulta Beauty Over Improper Disposal Of Hazardous Materials

The 49ers continue the 2017 season with another road game next week, this time in Indianapolis. This will be the second of three straight road games, with the Washington Redskins looming in Week 6. The Colts are starting the season 1-3 after losing to Seattle on Sunday Night Football, 46-18. Coincidentally, Indy also lost to Arizona in overtime, albeit at home. The Colts’ only win so far came in Week 3 against the hapless Cleveland Browns, and in Week 1, Indy was torched, 46-9, by the Rams. This again represents a winnable game for San Francisco, but if the 49ers don’t beat the Colts, they may go winless in October with the Redskins, the Dallas Cowboys and the Philadelphia Eagles lined up next.