Earlier this week, we ran through every MLB team's biggest surprise of the 2021 season, highlighting the likes of Cedric Mullins, Robbie Ray, Austin Riley, Garrett Whitlock, Ranger Suarez, Frank Schwindel and others who exceeded expectations this year.
Now it's time for the opposite end of the spectrum.
From injury-plagued seasons to underperforming young players who took a step backward in their development, every team has at least one guy who didn't deliver.
For the sake of this discussion, disappointment is all about production relative to expectations. Salary, role on the team and previous performance were also taken into account.
Baltimore Orioles: LHP Keegan Akin
Akin debuted in 2020 with a 4.56 ERA and 35 strikeouts in 25.2 innings, providing some hope that he could emerge as a key member of the O's starting rotation this year. Instead, the 2016 second-round pick struggled to a 6.63 ERA and 1.58 WHIP in 95 innings, allowing a .290/.357/.491 batting line along the way.
Boston Red Sox: OF Franchy Cordero
The Red Sox sold low on outfielder Andrew Benintendi last offseason, flipping him to the Kansas City Royals in a three-team deal that brought Cordero to Boston. The hope was a change of scenery would help tap into his significant power potential, and while he raked at Triple-A, he hit only .189/.237/.260 with a 37.5 percent strikeout rate in the majors. Meanwhile, Benintendi had a solid season and a terrific final month in Kansas City.
New York Yankees: 1B Luke Voit
After leading the AL with 22 home runs and finishing ninth in AL MVP voting last season, Voit dealt with an oblique strain and a knee strain while playing only 68 games this year. When healthy, his strikeout rate spiked from 23.1 to 30.7 percent, his OPS+ dropped from 157 to 109, and he homered only 11 times in seven more plate appearances than last season. All of that led to the Yankees' addition of Anthony Rizzo at the trade deadline.
Tampa Bay Rays: RHP Chris Archer
In one of the most intriguing buy-low moves of the offseason, the Rays reunited with Archer on a one-year, $6.5 million deal. A small sum for most organizations, it made him the second-highest-paid player on the Tampa Bay roster. Alas, forearm tightness limited him to 19.1 innings in another lost season for the former All-Star.
Toronto Blue Jays: 3B Cavan Biggio
Reliever Kirby Yates signed a one-year, $5.5 million deal and didn't throw a single pitch for the Blue Jays, but there was always considerable boom-or-bust potential in his return from injury. More troubling for Toronto's long-term outlook was the significant step backward that Biggio took in his third MLB season. The 26-year-old was a 5.0 WAR player in his first 159 career games, but he hit only .224/.322/.356 in 79 games and lost playing time to Santiago Espinal while also dealing with a back injury.
Chicago White Sox: LHP Dallas Keuchel
The White Sox could not have envisioned leaving Keuchel off their 2021 playoff roster a year after he posted a 1.99 ERA in 63.1 innings to finish fifth in AL Cy Young voting. In the second season of his three-year, $55.5 million contract, he scuffled to a 5.28 ERA and 1.53 WHIP in 162 innings, including an 8.62 ERA in his final eight appearances.
Cleveland Guardians: 1B/RF Josh Naylor
After he went 5-for-7 with three doubles and a home run in the AL Wild Card Series last year, Naylor was a popular breakout pick for Cleveland this season. The 24-year-old broke camp as the everyday right fielder, but he hit only .253/.301/.399 for a 90 OPS+ with 20 extra-base hits in 250 plate appearances before a fractured right ankle ended his season in late June.
Detroit Tigers: 2B Willi Castro
Hopes were high for Castro after he hit .349/.381/.550 in 140 plate appearances last year to finish fourth in AL Rookie of the Year voting. However, when the smoke and mirrors of an unsustainable .448 BABIP faded, he crashed back to earth with a .220/.273/.351 line and 74 OPS+ in 450 plate appearances en route to a minus-0.7 WAR season.
Kansas City Royals: RHP Brad Keller
A Rule 5 success story in 2018, Keller posted a 3.50 ERA and 131 ERA+ with 8.4 WAR in 360.1 innings over his first three seasons in Kansas City. The 26-year-old earned the Opening Day start as the seasoned veteran of a young staff, but he failed to live up to the role, pitching to a 5.39 ERA and 1.66 WHIP in 133.2 innings while allowing a .297 opponents' batting average.
Minnesota Twins: RHP Randy Dobnak
Signed to a five-year, $9.25 million extension in March, Dobnak broke camp in a swingman role for a Twins team with postseason aspirations. Much like the team, he failed to deliver on expectations, struggling to a 7.83 ERA in 43.2 innings before a finger strain sidelined him for more than two months. He returned for one appearance in September, but the injury resurfaced and he was shut down.