"We've come a long way," Garoppolo said. "I mean, a lot's happened in four years here."
During Garoppolo's tenure as the starter, there have been memorable moments as well as devastating injuries as he has vacillated from franchise savior to quarterbacking lame duck.
Now, as Garoppolo returns to Soldier Field and his hometown of Chicago (1 p.m. ET, Fox), it's fair to wonder if he will be making one of his final starts with the Niners in the same place he made his first one.
To be sure, 49ers coach Kyle Shanahan isn't viewing Sunday's game as a one-game referendum on the quarterback situation. In fact, until rookie quarterback Trey Lance, who was limited in Wednesday's practice, is fully healed from the sprained left knee he suffered on Oct. 10, there isn't really even a decision to make.
But it's hard to ignore the symmetry of Garoppolo and the Niners heading back to Chicago at a critical juncture in the season and for the franchise's future.
San Francisco has lost four in a row and its season is teetering on the brink of slipping away before the calendar turns to November. A loss to the 3-4 Bears would drop the 49ers to 2-5 with games against NFC West powerhouses Arizona and the Los Angeles Rams to follow.
As one might expect for a team struggling this much, heavy criticism has been directed at Shanahan and Garoppolo and at Shanahan's handling of the quarterback situation.
The balancing act between the future and present was always going to be a delicate one for Shanahan to strike. With each passing week, the calls for Lance have only grown louder as the lack of notable steps forward for Garoppolo have been increasingly hard to ignore.
Still, Shanahan remains steadfast that he won't put Lance in until he believes it's the right thing for the quarterback and the team.
"We didn't draft Trey to just fix this year," Shanahan said. "We drafted him so he could be the quarterback here of the future. And I get that's a matter of time, but we're not playing him just because of what our record is."
Sunday will mark exactly four years since the 49ers traded a second-round pick to the New England Patriots to acquire Garoppolo. At the time of that deal, they were in the midst of a nine-game losing streak.
In landing Garoppolo, the Niners were taking a swing on a potential franchise quarterback. If Garoppolo hit, they could spend their offseason resources elsewhere. If he didn't, they could still chase Kirk Cousins in free agency as planned.
So, when Garoppolo made that start against the Bears on Dec. 3, 2017, expectations were tempered. After Garoppolo went 26-of-37 for 293 yards and directed a game-winning drive, the 49ers suddenly had something they didn't have all season: hope.
With Garoppolo playing loose and working from a pared down playbook, the Niners won five games in a row, including victories against playoff teams Jacksonville and Tennessee in which Garoppolo posted two of his best performances as a Niner. During the win streak, Garoppolo averaged 308.4 yards per game with an 82.2 QBR.
It was enough to earn Garoppolo a then-record five-year, $137.5 million deal.
Along with that contract came the belief that Garoppolo was only scratching the surface. Alas, substantive growth has been hard to see.
Garoppolo suffered a torn left ACL in Week 3 of the 2018 season. He bounced back in 2019 with a solid performance as the Niners surged to an appearance in Super Bowl LIV as Garoppolo posted a 62.1 QBR.
Since, Garoppolo has struggled. A pair of ankle injuries cost him 10 games last season and a bruised and strained right calf has kept him out of one this season. In 11 games since the Super Bowl, Garoppolo has a QBR of 45.7 and averaged 200.2 passing yards per game as the Niners have gone 5-6.
Through it all, he's earned the respect of teammates for how he's carried himself, even as the 49ers so openly worked to replace him.
"I don't think anybody could have handled it better from the outward perception of what goes on in our building and all the negative things that are thrown at him and then what had transpired in the spring," tackle Mike McGlinchey said. "That's a tough situation. He's the perfect example of what to look at in terms of mental toughness and blocking out the noise and being a professional that you could ever find in this league."
Set to turn 30 next week with 40 career starts under his belt (including postseason), it's hard to envision Garoppolo becoming more than what he currently is. That, combined with the lengthy injury history, was enough for the 49ers to trade up in the draft to take Lance.
All of which begs the question of when Shanahan might make the change? Shanahan has maintained that he'd do that only when he believes Lance gives the team the "best chance to win." On Monday, Shanahan said he doesn't believe in playing young players just to gain experience until they're out of the playoff picture. He added that even then it's not always for the best.
Which is why -- for now -- Garoppolo remains the starter even as his time in San Francisco dwindles
"I know he's battled through a lot of that stuff," Shanahan said. "I think he had a great offseason. I thought he's been having a good year, up to when he got hurt versus Seattle. And he had a tough game there in that rainstorm, which not giving excuses, but when it comes to throwing the ball, I know that's not fun for anybody. But that's where we're at right now.”
If Garoppolo can't turn back the clock on Sunday, they could soon be somewhere else entirely.