COLUMBUS, Ohio — Michigan State handed Ohio State its first loss of the season on a game-winning 41-yard field goal from Michael Geiger. Here are three thoughts from the No. 9 Spartans’ 17–14 victory over the No. 3 Buckeyes.

1. Now we know how good Ohio State is—and Michigan State, too

We came here seeking clarity for the most vexing riddle of the 2015 college football season: How good is this 2015 edition of the Ohio State Buckeyes. Through 10 games, there had been precious few instances to glean true insight into these Buckeyes, as they had sporadically sputtered through a schedule against unranked teams. When a top 10 squad finally surfaced on the Buckeyes’ schedule on Nov. 21, Urban Meyer’s squad was both undefeated and untested—and it turns out, unprepared to showcase its talent on its first big stage of the season.

Geiger’s field goal shot through the uprights and sealed Ohio State’s fate. Michigan State is now in line to win the Big Ten after pulling off one of the most resounding upsets of this college football season. The Spartans’ 17–14 victory ended the nation’s longest winning streak at 23 games and snapped a Big Ten record 30-conference game winning streak. The defeat marked Meyer’s first regular season Big Ten loss. If not for one bad call at Nebraska, Michigan State would be at the forefront of the College Football Playoff picture. As is, the Spartans could still play their way into the top four with a Big Ten title.

Michigan State played with an unflappable resilience that has defined the team under Mark Dantonio. The Spartans pulled the upset Saturday without starting quarterback Connor Cook, instead using both Tyler O’Connor and Damion Terry. They also overcame two critical turnovers thanks to a simple formula to win—dominating with their defensive line and beating Ohio State through a show of sheer force. Michigan State outgained the Buckeyes 294–132, the statistic that best sums up how the Spartans pushed them around the field all day long.

2. Ohio State got nothing going offensively

Ohio State’s offense sputtered the entire day and could well have gotten shut out if not for two crucial turnovers that set up both Buckeyes touchdowns. Near the end of the first quarter, Ohio State defensive end Sam Hubbard strip-sacked Spartans’ third-string quarterback Terry, giving the Buckeyes the ball on the Michigan State 32-yard line. Ten plays later Ohio State managed to squeeze the ball into the end zone on a fourth-and-one plunge by Ezekiel Elliott.

The Buckeyes’ second touchdown was gift wrapped by Michigan State’s Macgarrett Kings Jr., who muffed a punt in the third quarter that Ohio State’s Terry McLaurin recovered at the six-yard line. Ohio State capped that drive by scoring on just one play, a jump pass from J.T. Barrett to Jalin Marshall.

The Spartans have one of the country’s better defenses, ranking No. 35 in scoring defense. They stonewalled the Buckeyes on Saturday, knocking Ezekiel Elliott out of Heisman Trophy contention by holding him to 33 yards on 12 carries. Elliott carried the ball just twice in the second half, a decision that will be second-guessed in Columbus for years to come. Ohio State never got into rhythm on offense, and the chirps about how much the Buckeyes misses former coordinator Tom Herman will only get louder.

3. The Spartans’ offense did just enough in glum conditions

Cook did not play Saturday after injuring his right (throwing) shoulder against Maryland last week. He didn’t play in the second half against the Terps, and Michigan State officials were tight-lipped this week about the extent of his availability. (Cook has a 32–4 record as the starter for the Spartans).

When Michigan State broke the huddle in its opening drive of the game, O’Connor was behind center for the Spartans. He was relieved intermittently— seemingly without much method—at varying points in the game by Terry. On a blustery day filled with driving rain, a slick field and generally miserable conditions, Michigan State’s typically conservative gameplan could have been drawn up by Ronald Reagan.

Considering the Spartans’ quarterbacks got thrust into a nearly impossible position, they didn’t play awfully. O’Connor was steady if unspectacular, finishing seven of 12 for 89 yards with a touchdown and eight rushes for 25 yards. Terry’s critical fumble in the first quarter came because lineman Kodi Kieler completely whiffed on blocking Hubbard. Terry finished one of four for two yards and rushed eight times for 37 yards.

Michigan State got a herculean performance from tailback Gerald Holmes, who had 65 yards on 14 carries with a touchdown. Freshman LJ Scott had 58 yards on 13 carries, and his extra effort allowed him to pick up a first down on the game-clinching drive.