The Most Inexplicable Near-Perfect Game in MLB History
Four forgettable Royals threw nine perfect innings. Would it be enough?
2023 was a bad year for major league baseball in Missouri. The Kansas City Royals stole the crown for futility – their record of 56-106 tied for the worst in franchise history, somehow buttressed by a favorable divisional schedule where the only team above .500 was the 87-75 Twins. Terrible baseball team across the board.
The Cardinals at least got to spend one day with a winning record, but that day was April 2nd when they were 2-1. They would lose their next four on their way to a 10-24 beginning that was well below the standards of St. Louis baseball. The Cardinals hadn’t lost more than 90 games in a season since 1990, a stretch of success that would end when they finished with a 71-91 record this season.
The 10-24 stretch culminated with an eight-game losing streak that was snapped on May 7. Since then, the Cardinals had improved considerably and had just won 14 of their last 21 games. Unfortunately, these 21 games all happened fairly consecutively. The only days off the Cardinals had in May 2023 came on May 1st and May 11th, both of which were distant memories by May 29th when this game was played. This was a brief two-game return to St. Louis after the past week was spent on a road trip in Ohio, with the Cardinals losing 4-3 to Cleveland the day before. If you don’t live in the Midwest, you’re probably underestimating the distance between Cleveland and St. Louis.
An I-70 Series still has intrigue, even when both teams are bad, and a Cardinals game on Memorial Day is always going to draw massive attendance. 45,911 fans piled into Busch Stadium to watch their tired Cardinals, the highest for any St. Louis home game that season besides Opening Day. It was 85 degrees and cloudy when the first pitch was thrown at 1:15 PM. A beautiful day for baseball, in theory.
Top of the 1st, Royals Batting, Tied 0-0, Cardinals' Adam Wainwright facing 1-2-3
Besides the cross-state transplants inexplicably eager to watch their 2023 Royals, hometown fans were surely interested in another chance to watch Adam Wainwright pitch. The franchise icon had announced that 2023 would be his final MLB season, then surprised the home fans by performing the national anthem on Opening Day. He didn’t end up making his pitching debut until May 6, and none of the four starts prior to this one had gone all that well. Still, he was on a two-start winning streak and had the opportunity to get back on track against this weak Royals lineup.
Nick Pratto singles on a line drive to left fielder Alec Burleson
This is not a story about Adam Wainwright’s pursuit of a perfect game. Adam Wainwright is three months away from turning 42 years old and is pitching in front of fans who have supported him for 18 seasons. If he got through four perfect innings today they would’ve held a parade in downtown St. Louis.
It’s not hard to find near-misses for a pitcher with a history as rich as Waino’s. About nine years before this, Wainwright was nearly perfect in a home start against the Arizona Diamondbacks, allowing one fourth-inning double to current teammate Paul Goldschmidt while pitching nine otherwise clean innings. At the tail-end of a 2021 season where Wainwright received Cy Young votes, he allowed just two singles in a nine-inning start against the Pirates, getting one of those baserunners out on a double play.
The version of Adam Wainwright pitching today is different. His first pitch is a called strike at 86.7 mph and his second pitch is a changeup that misses the zone wildly. When Wainwright goes back to the 87 mph sinker on his third pitch, Nick Pratto calmly lines a single into left field. This particular perfect game bid is over.
Vinnie Pasquantino singles on a line drive to right fielder Tommy Edman; Nick Pratto to 2nd
Vinnie Pasquantino is 25 years old and made his MLB debut less than a year ago. He hit precociously upon arrival and overcame a slow start to his sophomore season to heat back up. If he goes on to have a long and fruitful MLB career, as all hope and some expect, it may one day seem anachronistic that he ever went head-to-head against Adam Wainwright. The battle doesn’t last long; Wainwright’s first pitch is a duplicate of his last pitch to Pratto and it also gets hit for a single.
Salvador Perez grounds into a force out, second baseman Nolan Gorman to shortstop Paul DeJong; Nick Pratto to 3rd; Vinnie Pasquantino out at 2nd; Salvador Perez to 1st
Salvador Perez is something like the Royals’ version of Adam Wainwright, an analogy that would only get made in a circumstance where Yadier Molina has already retired but Wainwright hasn’t. Perez is a link between the World Champion Royals core of the early-mid 2010s and, euphemistically, the “Royals of the Future” (less-euphemistically, the “current slop” that is about to go 56-106). Like Wainwright, you can see his jersey throughout the stands and have no idea when it was purchased. Unlike Wainwright, Perez is still something of a young man, having just turned 33 a couple of weeks ago.
Perez makes it to first base, but grants Wainwright his first out as Pasquantino is retired on the fielder’s choice.
Bobby Witt Jr. pops out to first baseman Brendan Donovan
Anybody reading this has a distinct hindsight advantage. Bobby Witt Jr. was drafted second overall in the 2019 MLB Draft and oozed potential from the onset of his professional career. It didn’t exactly come together in his rookie season, where he combined a league-average bat with inexplicably poor shortstop defense. Things would eventually take a step forward in 2023, a season where Witt received MVP votes, before launching into the stratosphere in a 2024 that included the AL batting title and a transcendent 9.4 Wins Above Replacement (Baseball-Reference version).
This year’s step forward hadn’t quite begun by late-May. Entering this game, Witt had a slash line of .232/.267/.427. His power was on track with his rookie season and the other aspects of his hitting were worse. Today, he pops out on a curveball that lands right in the middle of the strike zone. The version of Bobby Witt Jr. that we’ve seen subsequent to this date hits that pitch 400 feet.
MJ Melendez flies out to left fielder Alec Burleson
From a 3-1 count, Wainwright gets two foul balls from Melendez before bringing 88.3 mph heat to induce the fly out. Just like that, Wainwright has evaded the self-inflicted threat and gone through the inning with no runs allowed. The shutout bid remains alive.
0 runs, 2 hits, 0 errors, 2 LOB. Royals 0, Cardinals 0.
Bottom of the 1st, Cardinals Batting, Tied 0-0, Royals' Josh Staumont facing 1-2-3
Throughout the 2023 season, the Royals had three reliable starters in Jordan Lyles, Brady Singer, and Zack Greinke. All three were reliably mediocre-to-bad, but they were steadfast members of the rotation who could take the ball every few days. The player with the fourth most starts on the 2023 Royals is Cole Ragans, who joined the team in July. Until then, the 4th and 5th spots in the rotation were something of a patchwork. Brad Keller and Kris Bubic got the first set of starts in the rotation, but Bubic incurred a season-ending elbow injury by the end of April and Keller suffered a mostly season-ending shoulder injury in May. There are technical answers to the question “how did the Royals fill those rotation spots?”, but the simplest and most accurate answer would be “they didn’t.” 23 pitchers would start a game for the Royals during the 2023 season.
These circumstances meant that, for the first and thus far only time in his life, Josh Staumont was starting a Major League Baseball game. Josh Staumont was a high-leverage reliever for Kansas City in 2020 and 2021, to the extent that there were any high leverage moments in Royals games in those seasons. His results got worse in 2022 and Staumont started the 2023 season in the minors, though he got back to MLB by mid-April. He had pitched in 18 MLB games so far this season, including the day before in Kansas City, when he threw 15 pitches to close out the 6th inning.
Obviously, nobody thought Josh Staumont was going to throw a perfect game and he wouldn’t be given the opportunity to do so. Staumont was here to get three outs.
Lars Nootbaar flies out sharply to center fielder Drew Waters
The first three pitches Josh Staumont throws are balls, which can’t be that surprising. One of the main culprits in Staumont’s diminished effectiveness since 2021 has been an increased propensity to walk batters. His fourth pitch is a fastball that catches the corner and his fifth is a fastball that catches the entire plate. Lars Nootbaar is able to square it up and hit it 386 feet at a velocity of 104.4 mph.
This whole shindig could have ended before it started. According to Statcast, Nootbaar’s hit had an expected batting average (xBA) of .810. But the Royals are ready for this and are playing a deep center field. Drew Waters jogs casually back to the warning track to catch an easy flyout and start the perfect game bid at 0.1 innings.
Paul Goldschmidt strikes out swinging
Goldschmidt’s pitch to hit comes on the third pitch of the at-bat, after he’s swung at a slider and watched an outside fastball. Staumont throws a sinker right down the middle and Goldschmidt swings and misses. Two more balls, one of which nearly hits Goldschmidt, sets up a strikeout on another slider.
Nolan Gorman called out on strikes
Broadcasters like to talk about the difficulty that trained relievers face when starting a game. The bullpen is a crucible of adrenaline, and the deranged souls who dwell there simply aren’t equipped to start their workday at anything less than a screaming sprint. After the game, Staumont would claim his “turning point” came when he went down 3-0 to Nootbaar and made his work sufficiently treacherous. “I’m not trying to go 3-0 to start that, but when you get there, you’re like, ‘This is my turn to pick myself up, reset really quickly and refocus,’” said Staumont.
I’m not sure Staumont would feel that way if Nootbaar’s .810 xBA ball had landed for a hit, but he’s undoubtedly feeling the burn by the time he faces Nolan Gorman. Staumont follows a 96 mph sinker with one at 98.6, his hardest pitch of the outing. Both are on the outside part of the plate and both are fouled off. The third pitch is a fastball that lands just on the inside edge for a called strike three. Nobody cares about it yet, but Josh Staumont has just completed the first of several perfect innings the Royals will throw that day.
In other events that nobody knows yet, this will be Josh Staumont’s final perfect outing of the 2023 season and as a Kansas City Royal. He pitches two more times in June, allowing runs in both appearances, then goes on the injured list with an ailment that is originally called a neck strain but eventually results in thoracic outlet syndrome surgery. The team does not tender him a contract after the season.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 0, Cardinals 0.
Top of the 2nd, Royals Batting, Tied 0-0, Cardinals' Adam Wainwright facing 6-7-8
Part of a team’s goal while playing a miserable baseball season is to evaluate the suitability of young players for MLB action. The bottom half of the Royals’ lineup is full of players who might one day prove themselves to be worthy big leaguers, rather than their current status of big leaguers by default.
Michael Massey flies out to center fielder Lars Nootbaar
The Royals drafted Michael Massey in the 4th round of the 2019 draft and he’s playing second base for the MLB team this season. There were 30 players who got more than 400 plate appearances in 2023 while primarily playing second base, according to Fangraphs, and Michael Massey was the 29th best hitter of the group. He’s somehow sixth in this batting order.
Massey actually makes clean contact here, but Lars Nootbaar makes a great play while leaping into the fence to snag it for an out. Externally, it seems like the ball could’ve been caught without slamming into a wall, but my analysis benefits from knowing how much slamming into that wall would hurt. Nootbaar would eventually get pulled from the game with back spasms and miss the next three weeks of action.
Freddy Fermin called out on strikes
Freddy Fermin first burst into fringe baseball consciousness by having a similar name to Freddie Freeman. As time went on, Fermin started to look like a quality defensive catcher with enough hitting ability to survive in the majors. He’s just turned 28, but is getting his first extended look at the MLB level and proving that he can make his own name in baseball.
Fermin watches strike one on the lower-outside corner, then strike two on the outside edge. He watches his third strike on the fifth pitch of the at-bat. It is high and well outside of the strike zone, but he’s Adam Wainwright and you’re still Freddy Fermin for now.
Nicky Lopez singles on a line drive to center fielder Lars Nootbaar
In some sense, Nicky Lopez is still the type of young talent you’d expect the Royals to be workshopping. He’s just a couple months older than Freddy Fermin. But a key distinction is that Lopez has been on the MLB roster since 2019 and has been bad for much of that time. You only generate excitement from fresh young players if you clean out the husks of the last crop.
The Royals will do this in short order, trading Lopez to the Braves in a couple of months, but for now he’s playing third base. The third pitch of Lopez’s at-bat is a 81.4 mph changeup that is realistically not moving slow enough to be credibly followed by a 85.1 mph fastball. The fifth pitch is a high curveball that Lopez pokes into center field for a single.
Drew Waters strikes out swinging
The other problem with playing your young talent is that there’s typically going to be an insufferable hole in their game. Baseball is quite a difficult sport and there is always a generalized risk that a prospect’s strengths won’t shine enough to outweigh their weaknesses. This is actually the more frequent outcome.
The book on Drew Waters has been clear for most of his professional career and falls into a classic prospect trope. Prospect Drew Waters could play center field, steal bases, and hit for some power, but struggled with making contact. This is only his fourth game up with the big league team this year. The MLB version of Waters has less power than advertised, but he has the “struggling with making contact” part totally locked down. Waters swings at all three pitches in the at-bat, the final of which bounces in front of home plate.
0 runs, 1 hit, 0 errors, 1 LOB. Royals 0, Cardinals 0.
Bottom of the 2nd, Cardinals Batting, Tied 0-0, Royals' Mike Mayers facing 4-5-6
Mike Mayers checks in for his third appearance as a Kansas City Royal. Mayers was drafted by these St. Louis Cardinals back in 2013 and debuted in this Busch Stadium in July of 2016. The debut was historically wretched – Mayers started the game and gave up nine earned runs while getting just four batters out. No pitcher had ever allowed so many runs and gotten so few outs in their debut start. After the horrific audition as a starter, Mayers was moved into the bullpen for the rest of his time in St. Louis. The closest he came to making a positive on-field contribution was in 2018, when he kept a 4.70 ERA across his 51.2 relief innings and was optioned to and from AAA seven times.
After the 2019 season, the Cardinals waived Mayers and he joined the Angels with a 7.03 career ERA to his name. His 2020 was incomprehensibly good (by his standards) and was followed by another effective year in 2021. On two occasions that season, the Angels used Mayers as their “starting pitcher” as the first among seven bullpen arms who would pitch the game. Both times, he was hit for multiple runs. Mayers got off to a rough beginning in the 2022 season, then allowed runs in three straight May outings to lose his spot on the active roster and get sent to Salt Lake City for a summer in AAA.
Since Mike Mayers became an MLB pitcher, he had started three games and failed to keep an ERA under 9 for any of them. Inexplicably, the Salt Lake City Bees gave Mayers a couple weeks off and then began experimenting with him as a starter. It went predictably poorly at first, with Mayers allowing four runs in each of his first two starts of 1.2 and 2.0 innings. Mayers was eventually stretched out to a maximum of 6.0 innings in his final AAA start, allowing four runs (three earned) to the Reno Aces. Apparently satisfied by this conversion, the Angels returned Mayers to the majors and used him in extended outings, including three starts. Almost all of these appearances entailed Mayers allowing multiple runs, and his ERA rose from 5.40 to 5.68 once his second half was factored in.
The Angels had seen enough to know that they didn’t want Mayers as a starter or reliever. Neither did any other MLB team. But the Royals must’ve liked what they saw from Mayers as a starter, since they offered him a minor league contract that included a rotation spot in AAA. He made eight starts for the Omaha Storm Chasers, a couple of which were actually pretty good. Mayers was called up to the Royals and made his first appearance on May 19. He threw 56 pitches in 2.2 innings and probably would’ve gone further if not for the four batters he walked. His second outing was a start against the Tigers and was undeniably successful, with eight strikeouts across 4.2 innings. This outing would break the tie on the early verdict of his time in Kansas City.
Nolan Arenado grounds out, third baseman Nicky Lopez to first baseman Vinnie Pasquantino
Like Staumont, the first three pitches that Mayers throws are balls. Perhaps this lulls Arenado into a false sense of security; he watches the fourth pitch for a called strike and then watches the fifth, a slider that lands dead-center in the strike zone. Appropriately enlivened by the smell of blood, Arenado does not want to miss that pitch again, so he swings and grounds out on the next pitch.
Willson Contreras grounds out, third baseman Nicky Lopez to first baseman Vinnie Pasquantino
A shorter at-bat with the same outcome. After watching the first two pitches, Contreras fouls off the next two and then grounds out on the fifth.
Brendan Donovan grounds out, third baseman Nicky Lopez to first baseman Vinnie Pasquantino
The only way Mayers ever has the upper hand in this battle is by virtue of getting the out. The first, fourth, and sixth pitches of the at-bat are balls; every other pitch (most of which are not in the strike zone either) gets fouled off by Donovan. The eighth pitch catches enough plate for Donovan to hit it, but he only manages to hit it 53 feet.
Through 19 pitches, Mike Mayers has thrown one perfect inning. This would be his worst inning of the afternoon.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 0, Cardinals 0.
Top of the 3rd, Royals Batting, Tied 0-0, Cardinals' Adam Wainwright facing 1-2-3
Nick Pratto doubles on a sharp fly ball to right fielder Tommy Edman
Nick Pratto is the first to bat twice against Wainwright and launches a 71 mph curveball into right center field. As both fielders sprint towards the wall in the gap, center fielder Lars Nootbaar suddenly pulls up and falls to the warning track in pain. This is the point at which he exits with back spasms and likely the point at which a critical mass of the hometown fans stop having fun at the baseball game.
Oscar Mercado replaces Lars Nootbaar, batting 1st, playing center field.
Vinnie Pasquantino doubles on a sharp ground ball to right fielder Tommy Edman; Nick Pratto scores
The young Royals hitters have found a useful strategy against the veteran Wainwright by working the count and forcing him to throw something soft in the strike zone. It’s pretty easy because everything Wainwright throws at this stage of life is soft. Pasquantino works a full count and then gets a sinker in the zone, which he ropes down the first-base line at 109.5 mph. The ball is hit so hard that its robust ricochet off the wall almost imperils Pasquantino’s double, but he slides in just ahead of the tag. Pratto scores and the Royals have a lead that they will not relinquish.
Salvador Perez pops out to shortstop Paul DeJong
The free-swinging Sal Perez did not get the memo about working the count. The first pitch he sees in the strike zone, so he swings at it, as is his custom. The 88.7 mph incoming velocity is comparative smoke to Wainwright’s other offerings. Perez pops it to shortstop.
Bobby Witt Jr. pops out to first baseman Brendan Donovan in foul territory
Bobby Witt works the count to the best of his ability, but a pitch that should make the count 2-0 gets called as a strike to make it 1-1 instead. This means that instead of watching a 3-0 pitch fall into the strike zone, Witt swings at a 2-1 pitch and pops it out.
MJ Melendez walks
Melendez swings at the one pitch that’s clearly in the strike zone and fouls it off. Four of the other six are balls. Wainwright has thrown 55 pitches.
Michael Massey singles on a ground ball to first baseman Brendan Donovan; Vinnie Pasquantino to 3rd, MJ Melendez to 2nd
With RBI stakes on the table, it’s harder to restrain aggression. Michael Massey swings at the first two pitches he sees, fouling off the second. The third misses the strike zone wildly, the fourth misses the strike zone and gets fouled off, and the fifth misses the strike zone wildly. The sixth is close enough to hit within the infield. Brendan Donovan, playing first base, dives to the ball to stop it from going into the outfield, but it bounces off his glove and deflects into no-man’s land. There’s no throw and everybody is safe to load the bases.
Freddy Fermin grounds into a force out, fielded by third baseman Nolan Arenado; MJ Melendez out at 3rd
The threat is over quickly, with Fermin bouncing the second pitch four feet in front of the plate on its way to third. Nolan Arenado easily fields it and steps on third ahead of a pointlessly sliding Melendez.
1 run, 3 hits, 0 errors, 3 LOB. Royals 1, Cardinals 0.
Bottom of the 3rd, Cardinals Batting, Behind 0-1, Royals' Mike Mayers facing 7-8-9
Paul DeJong flies out to right fielder MJ Melendez
DeJong hits a 1-2 pitch hard, but with plenty of loft.
Alec Burleson pops out to catcher Freddy Fermin in foul territory
Burleson swings at the first pitch he sees and pops it to the backstop. Freddy Fermin chases after it in the afternoon sun, then hurtles into the netting to successfully haul it in. His collision into the base of the wall supporting the net is firm and loud.
Tommy Edman bunt grounds out, third baseman Nicky Lopez to first baseman Vinnie Pasquantino
It would ordinarily be considered poor form to break up a perfect game attempt with a bunt. This is different for a number of reasons, most obviously that it’s the third inning of a game that’s already seen two relievers pitch. Besides, for anybody batting ninth in the St. Louis Cardinal lineup, bunting for a hit should be considered an acceptable part of the repertoire.
Tommy Edman’s attempt doesn’t work. Through 29 pitches, Mike Mayers has thrown two perfect innings. Every Cardinal is 0-for-1.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 1, Cardinals 0.
Top of the 4th, Royals Batting, Ahead 1-0, Cardinals' Adam Wainwright facing 8-9-1
Nicky Lopez singles on a ground ball to first baseman Brendan Donovan
The Royals attempt to pick back up where they left off. Nicky Lopez gets a changeup over the plate and hits it to right about the same part of the infield where Michael Massey hit it last inning. Brendan Donovan stretches in front of the ball, but sort of gets caught up on top of it and is left with no play but a far-too-late flip to Wainwright covering first.
Drew Waters strikes out swinging
Drew Waters is determined to not strike out on three pitches again. When the first pitch he sees catches the corner of the strike zone, he freaks out and starts pressing. He swings and misses at the second and third pitches, the latter of which is another curveball a foot beneath the strike zone. Drew Waters has seen six pitches and struck out twice.
Nick Pratto called out on strikes
Nick Pratto looks at all four pitches of this at-bat. The fourth is clearly outside but gets called for strike three, probably because he’s Adam Wainwright and you’re Nick Pratto.
Vinnie Pasquantino flies out to center fielder Oscar Mercado
Wainwright has settled down – he still doesn’t have a “clean inning,” but he’s only allowed one run through four innings. So far, this is a good start.
0 runs, 1 hit, 0 errors, 1 LOB. Royals 1, Cardinals 0.
Bottom of the 4th, Cardinals Batting, Behind 0-1, Royals' Mike Mayers facing 1-2-3
This is the first time that Mike Mayers has pitched as something like a “starter” while appearing after an “opener.” The “opener” strategy emerged in MLB during the 2017 and 2018 seasons, when the Tampa Bay Rays would send hard-throwing right-hander Ryne Stanek out to get a few outs before swapping him for another pitcher, often a soft-tossing lefty like current Royal Ryan Yarbrough.
This situation is different in that Staumont and Mayers both throw right-handed. But a consistent appeal of using an opener for a pitcher who probably can’t go nine innings anyways is to limit the number of times that pitcher faces the opposing team’s best hitters at the top of the order. Had Mayers started instead of Staumont, this would be his second time through the lineup and the Cardinals’ best hitters would be more comfortable with him on the mound. Instead, this will be their first time seeing Mayers.
Oscar Mercado pops out to second baseman Michael Massey
The advantage of having used an opener doesn’t apply to Oscar Mercado, who came in to replace the injured Nootbaar and is taking his first at-bat against any pitcher. Fortunately for Mayers, you don’t really need any advantage to get Oscar Mercado out. He pops out on the second pitch he sees.
Paul Goldschmidt strikes out swinging
Ordinarily, it would make sense to limit the number of times Paul Goldschmidt sees your pitcher. Goldschmidt is the reigning NL MVP and has been one of the National League’s most frightening hitters for a decade. And his familiarity tends to breed success. Goldschmidt has faced Madison Bumgarner more than any other pitcher over the course of his career, with 92 plate appearances. He has a slash line of .338/.424/.610 in that span, compared to the .240/.292/.394 that Bumgarner allowed to the general population.
It might not matter today, where Goldschmidt seems to be out of sorts. He’s rarely missed games during his MLB career and has played in all but one of the Cardinals’ games so far this season. He is 35 years old and this may no longer be an advisable workload. To start his 116th plate appearance in the month of May, Goldschmidt watches the first three pitches, the first of which is a ball and the latter two of which are strikes in the center of the zone. The fourth gets fouled off and the fifth is whiffed at. Mayers dispatches Goldschmidt with five fastballs, all of which travel between 93.7 and 95.5 mph.
Nolan Gorman pops out to second baseman Michael Massey
Mayers throws six pitches this at-bat and one of them is good – the second pitch is a well-placed slider that Gorman hacks at hopelessly. Three of the pitches are non-competitive balls and another is a fastball in the nitro zone that Gorman misses. The sixth is a hanging slider that Gorman pops into the shallow outfield.
Through 42 pitches, Mike Mayers has thrown three perfect innings.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 1, Cardinals 0.
Top of the 5th, Royals Batting, Ahead 1-0, Cardinals' Adam Wainwright facing 3-4-5
Salvador Perez singles on a ground ball to center fielder Oscar Mercado
Salvador Perez doesn’t WANT to be patient and work the count, but Wainwright gives him no choice. Three of the first four pitches he throws are nowhere near the strike zone, and the other one isn’t either but Perez swings at it anyways. Wainwright’s fifth pitch is a great curveball that Perez whiffs on, and his sixth is a less-good curveball that gets fouled off. The seventh gets knocked up the middle for a leadoff single.
Bobby Witt Jr. strikes out swinging
Wainwright is wary enough of Witt Jr. to keep his pitches on the edges. The pitch that Witt strikes out on is outside of the zone, but so was the pitch that was called for strike one (because he’s Adam Wainwright and you are not quite Bobby Witt Jr. yet), so it’s hard to blame him.
MJ Melendez triples on a sharp line drive to right fielder Tommy Edman; Salvador Perez scores
This is one of five triples that MJ Melendez hit in 2023, a higher number than I expected for a former catcher forced into left field due to his inability to play defense. The numbers suggest that Melendez is faster than I thought, but a possible key to his triple success becomes clear upon viewing this highlight. Melendez hits it into the gap and it bounces to the outfield wall, but before it gets there the Royals’ color commentator is saying “come on, Salvy” as the cement-footed Perez scampers around the bases. When third base coach Vance Wilson waves Perez to home, the play-by-play announcer’s voice rises two octaves. The relay throw goes for the play at the plate and the broadcast camera follows it, during which time you can see Melendez casually sliding into third in the background. Perez runs like he’s trying to get to a bathroom from an ice rink and doesn’t have time to take his skates off, but still beats the throw.
Michael Massey walks
This nine-pitch walk elucidates the danger in letting MLB hitters see your stuff for the third time. Massey has made solid contact against Wainwright in his prior two at-bats and is locked in here. He fouls off five pitches, four of which catch some of the strike zone. The first ball Wainwright throws comes on his second pitch and is a little high. The next three balls come later in the at-bat and miss the zone substantially, with the fifth and eighth pitches bouncing in the dirt and the ninth sailing a foot into the other batter’s box.
Freddy Fermin out on a sacrifice bunt, catcher Willson Contreras to first baseman Brendan Donovan; MJ Melendez scores, Michael Massey to 2nd
Fermin collects an RBI and contributes an out on the first pitch he sees. Maybe it would’ve been advisable to take more pitches from Wainwright, who has already thrown 99, but maybe the Royals just don’t want to see this legend leave the game, particularly when he’s so hittable.
Nicky Lopez called out on strikes
The unfortunate amount of data that gets collected today can dispel a lot of baseball nostalgia. We’ve witnessed a 91 mph 4-seam transition from “fast” to “slow” as new pitchers get called up every day with the kind of stuff that would’ve blistered eyebrows in 2004. How is it possible to believe that the legends of the past could compete with the freaks of today?
Well, to let them tell it, the new generation lacks the “feel for the game” possessed by the old greats. Greg Maddux didn’t set speed records, but he knew exactly how to pitch at each phase of the game. If Adam Wainwright were drafted in 2020 instead of 2000, maybe he’d have a few extra miles per hour on his fastball or a slider that could cut diamonds. Instead, he has his reliable curveball and approximately 85 mph of speed, to be allocated appropriately. He’s gotten two outs this inning, one of which was voluntary and the other of which came courtesy of a generous strike zone.
But he also has buckets full of guile. Wainwright’s first pitch is the 100th of his outing and is his final curveball of the day – it bounces in the dirt for ball one. The next pitch looks like it’s dropping out of the zone too, but turns out to be the sinker landing for called strike one. His third pitch is a changeup that also bounces and leads Wainwright to dispense with offspeed entirely. The fourth pitch looks like a fastball on the inside part of the plate, then turns into a cutter that beelines towards Lopez’s ankles while he swings at air. The trap has been set. Wainwright throws an even better version of his second pitch, a fastball precisely on the outside edge of the plate. Lopez has watched two breaking balls fall to the dirt and just swung at a pitch that was actually a foot inside. His mental image of the strike zone is scrambled and he freezes as the pitch buzzes in, resuming motion only to double over in anguish when the sound of the umpire’s strike three call completes its journey to his soul. Wainwright’s 105th and final pitch is a punchout fastball that clocks in at 85.1 mph.
2 runs, 2 hits, 0 errors, 1 LOB. Royals 3, Cardinals 0.
Bottom of the 5th, Cardinals Batting, Behind 0-3, Royals' Mike Mayers facing 4-5-6
Nolan Arenado grounds out, third baseman Nicky Lopez to first baseman Vinnie Pasquantino
The near-perfect game is something of a funnel. While putting nine perfect innings together is exceedingly rare, it’s fairly ordinary to put together one perfect inning. Even for a team with such flawed pitching as the 2023 Royals, there were 43 perfect innings to start a game, 15 of which came before May 29. Of those 15, eight blew the perfect game bid by the second inning, leaving just seven that could string together two in a row. Four of those seven allowed baserunners in the third inning, with one outing from each of Ryan Yarbrough, Jordan Lyles, and Brady Singer as the three Royals starts that had been perfect for a first run through an opponent’s batting order. But then those guys had to face the opponent’s batting order again, and all three allowed home runs in the fourth inning to shatter their perfect game attempts – Singer with no outs, Yarbrough with one, and Lyles with two. Singer received the heaviest obliteration that inning, allowing five hits that scored four Giants, but thanks to a late Kansas City rally he’s the only one who avoided taking the loss in their near-near-near-near perfect game.
When Nolan Arenado grounds out on the first pitch, the Royals are through 4.1 perfect innings. Mayers has thrown 3.1 of them, elevating him past Singer on the 2023 Royals leaderboard and into a tie with Yarbrough. As a team, they are in uncharted territory.
Willson Contreras grounds out to first baseman Vinnie Pasquantino
Willson Contreras whiffs at the first pitch and grounds out on the second, bringing Mayers into a tie with Lyles at 3.2 perfect innings to start his day. This is now the 7th-most innings Mayers has thrown in a MLB game, perfect or otherwise. The last time he went 3.1 was in a September appearance with the Angels, where he allowed five runs (not including the three inherited runners that he immediately let score via grand slam) and reduced his team’s odds of victory by 32.7% per WPA.
Brendan Donovan grounds out to first baseman Vinnie Pasquantino
This five-pitch at-bat only feels difficult because Mayers has made the last two look so easy. Donovan gets three low pitches and a 3-0 count, then watches a fourth pitch scrape the top of the zone for strike one. The fifth is similarly well-placed on the outside edge and gets bounced to first base.
Through 50 pitches, Mike Mayers has thrown four perfect innings. The Royals have thrown five. This has officially become something to monitor.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 3, Cardinals 0.
Top of the 6th, Royals Batting, Ahead 3-0, Cardinals' Steven Matz facing 9-1-2
This is Steven Matz’s second season with the Cardinals after signing a four-year free agent contract. In the first year, Matz got hurt over the summer and returned as a relief pitcher in mid-September, mostly due to the complications of stretching back out for an extended workload at such a late juncture. This is the first time Matz is being used as a St. Louis reliever with real intentionality – after making 10 starts and getting blown up for six runs in the most recent, Matz will work out of the bullpen for the next month. He will see slight improvement, then he’ll return to the rotation in July and pitch way better, then he’ll get shut down for the season with a lat strain in August. How can you not be romantic about baseball.
Drew Waters flies out sharply to right fielder Tommy Edman
This time, Drew Waters behaves himself. He watches the first two pitches, even though both are strikes, and gets rewarded with a third pitch that touches the ionosphere above the zone. On the next three pitches, Waters knocks foul balls to stay alive and takes the 7th pitch to work the count even. The eighth pitch is a changeup down the middle, the type that Waters is able to damage. He slams it with an exit velocity of 100.5 mph, sending the ball soaring towards the warning track. The expected batting average on hits like this is .470.
That still means it’s an out 53% of the time. Tommy Edman gallops back and is able to grab it on the run for out one.
Nick Pratto grounds out, second baseman Nolan Gorman to first baseman Brendan Donovan
Steven Matz already faced off with the Royals back when he was an established member of the Cardinals rotation. In May of 2022, Matz threw six shutout innings to defeat Zack Greinke in a 1-0 pitchers’ duel. This familiarity provides no advantage to these Royals; six of the nine batters in the lineup have rolled over since last year (all but Perez, Witt, and Lopez). You can’t fault them for that – why would you want to keep the hitters who got shut out by Steven Matz?
Eight of the nine hitters in today’s Cardinals lineup remained with the team one year later.
Vinnie Pasquantino flies out to center fielder Oscar Mercado
After the game, Pasquantino would report that this is around the time he figured out a perfect game was going on. “I did not know until the sixth inning,” said Pasquantino. “And then I looked up and went, ‘Oh. We haven’t given up a hit. And nobody’s been on first. So, OK. All right. Now we go.’”
0 runs, 0 hits, 0 errors, 0 LOB. Royals 3, Cardinals 0.
Bottom of the 6th, Cardinals Batting, Behind 0-3, Royals' Mike Mayers facing 7-8-9
Paul DeJong strikes out swinging, catcher Freddy Fermin to first baseman Vinnie Pasquantino
The additional notation on the strikeout implies a “dropped third strike,” but it’s not like Fermin had any opportunity to “catch” it. The pitch that DeJong flails at bounces in front of home plate and is neatly corralled by Fermin before completing its journey to first base.
Paul DeJong is the only hitter the Cardinals had gotten rid of by May 2024. He became a Blue Jay, then Giant, then White Sox, and finally a Royal.
Alec Burleson lines out to right fielder MJ Melendez
Alec Burleson has been used as a pinch hitter a few times in the month of May, which ruins an otherwise neat streak. In every start he’s made since April 28, he’s reached base at least once. But in his six pinch hit appearances during that span, he’s 0-5 with a walk. Maybe they should stop doing that.
If not for the fact that his streak had already been broken on five separate occasions, Burleson’s streak would be ending today. Mayers doesn’t give him anything to hit and it’s a moral victory to make solid contact with a pitch that otherwise would’ve been strike three.
Tommy Edman lines out to center fielder Drew Waters
Perfect games have been considered the provenance of individual pitchers, but inevitably require team efforts. If a player commits an error, like Hanley Ramirez did while playing shortstop during Clayton Kershaw’s 2014 no-hitter, a pitcher’s bid at perfection is ruined through no fault of their own.
More abstractly, it always seems like these pitching performances feature a key defensive play to record an out on a ball that would otherwise have landed. When Matt Cain threw his perfect game in 2012, he led off the 7th inning by giving up what looked like an extra-base hit. The home fans fell silent, but right fielder Gregor Blanco was determined to keep history alive and sprinted backwards, extending his glove in a dive on the warning track that gave him just enough reach to make the catch and reignite the stadium.
Edman’s contact with the first pitch is more “poked” than “crushed,” but it bloops towards shallow centerfield with the same trajectory as a million different singles from the history of baseball. The xBA on contact like this is .720 but it won’t land this time. Unlike the Giants fans of 2012, who clearly wanted Matt Cain to finish his perfect game, the Cardinals fans seem conflicted when Edman makes contact. The crowd’s murmur evokes something like the early stages of roar, but the sounds of disappointment when Waters dives forward to snag it are quickly replaced by cheers. It’s hard to know whether they come from Royals fans or Cardinals fans who have started rooting for history, which is starting to creep close.
Through 60 pitches, Mike Mayers has thrown five perfect innings. The Royals have thrown six. They are nine batters away.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 3, Cardinals 0.
Top of the 7th, Royals Batting, Ahead 3-0, Cardinals' Steven Matz facing 3-4-5
Salvador Perez flies out to right fielder Tommy Edman
Salvador Perez demonstrates a poor feel for this game situation. He’s caught six innings of a perfect game and his team has a 90% chance to win the game when he steps up to bat. Instead of getting the plate appearance over with so he can focus on what matters, Perez fouls off a bunch of pitches and doesn’t fly out until Matz’s eight pitch.
Bobby Witt Jr. hit by pitch
In 2015, Max Scherzer was in his first season with the Washington Nationals. In his seventh home start with the team, he took a perfect game into the ninth inning and got the first two batters out. Jose Tabata came in for the Pirates as a pinch-hitter and Scherzer got him into a 2-2 count. History was one pitch away, but it was going to be a different sort of history. With one strike to go until the perfect game was completed, Scherzer’s 103rd pitch was inside and hit Tabata’s elbow. Tabata absolutely leaned his elbow into the pitch:
Scherzer would complete the no-hitter on the next batter and Tabata would only reach base two more times in his MLB career, but the example shows how fragile a perfect game attempt can be. 102 pitches from Scherzer constituted perfection, but the 103rd was just imperfect enough for an MLB hitter to exploit.
Three of the four pitches that Matz throws to Witt in this plate appearance are near the strike zone and constituted acceptable, but the fourth is a curveball that unacceptably hits Witt in the foot.
Bobby Witt Jr. steals 2nd base
MJ Melendez called out on strikes
Bobby Witt snags his 16th of the 49 bases he’ll steal in 2023, setting a 21st-century Royals record (11th in team history when you include the 20th century). MJ Melendez strikes out for the 65th of the 170 times he’ll strike out in 2023, which is tied for the third-highest season total in any century of Royals baseball. It’s up to you which of these accomplishments is more impressive.
Michael Massey hit by pitch
The second hit by pitch in any inning is less charming than the first, particularly when it comes in high instead of low. The pitch colliding with Massey’s shoulder blade sounds like an axe hitting a tree and is responded to via one enunciated boo, clearly audible on broadcast.
Freddy Fermin strikes out swinging
Hitting batters is a clever shortcut to allow baserunners without affecting the perception of your outing too badly. HBPs aren’t included in the typical pitching line of a box score; instead they’re stashed in the footnotes with frivolities like balks and pickoffs. In a typical shorthand form of referring to pitching outings, we would just say that Matz is through two innings where he’s struck out two and allowed no hits or walks. We aren’t used to saying that Matz struck out two and hit two – “hit” is supposed to be a noun in this clause rather than a verb.
0 runs, 0 hits, 0 errors, 2 LOB. Royals 3, Cardinals 0.
Bottom of the 7th, Cardinals Batting, Behind 0-3, Royals' Mike Mayers facing 1-2-3
Oscar Mercado flies out to center fielder Drew Waters
The second pitch Mercado sees is a fastball down Broadway and he hits it at 99.1 mph, the hardest exit velocity that a Cardinals hitter has managed since the first batter of the game. He hits it way too high to pose any sort of threat and it’s caught easily for out one.
Paul Goldschmidt flies out sharply to center fielder Drew Waters
Paul Goldschmidt hits this ball 101.0 mph, the new hardest exit velocity that a Cardinals hitter has managed since the first batter of the game. He does so in a 2-2 count with a fastball well-above the strike zone. It’s too high to make true home run contact with; Goldschmidt gets it to the warning track, where Waters is waiting for an easy out.
Nolan Gorman strikes out swinging
Gorman is the last batter that Mayers will face on his second time through the order, but this is the third time Gorman has come up to bat. In any circumstance where the Cardinals aren’t falling victim to history, Gorman would’ve likely had at least one plate appearance with runners on base and under two outs. It probably wouldn’t be the 7th inning by the time he had his third at-bat. Even if he had been ignorant to the ongoing perfect game, there are numerous context clues.
If the Royals complete this perfect game, Gorman won’t get another chance to hit. When he goes down 0-2, he’s thinking about protecting the strike zone and starts to swing as Mayers’ pitch approaches. As it reveals itself to be a curveball in the dirt, Gorman pulls back his swing, then looks to the umpires as if he’s managed to check it. The umpires rule that he swung just as Freddy Fermin grabs the ball to apply the tag on the dropped third strike. The sold-out Busch Stadium sounds like a community college pep rally as the Royals jog off the field.
Through 70 pitches, Mike Mayers has thrown six perfect innings. The Royals have thrown seven. They are six batters away.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 3, Cardinals 0.
Top of the 8th, Royals Batting, Ahead 3-0, Cardinals' Steven Matz facing 8-9-1
Nicky Lopez singles on a line drive to center fielder Oscar Mercado
This is Nicky Lopez’s third hit of the game, but nobody cares about Nicky Lopez right now. Matt Quatraro is in his first year managing the Royals and, at risk of being rude, he has not had to make a single decision of significance. Maybe he’s made decisions that have led to wins or losses, but would it have really mattered if the 56-106 Royals changed their record by plus or minus four games?
Today, with no single pitcher claiming possession of the Royals’ perfect game, Matt Quatraro is theoretically the man responsible for maintaining it. Presumably, I think. We’re actually in uncharted territory here; none of the 23 perfect games that have occurred previously have involved more than one pitcher. Once we get this close to a combined perfect game, should the manager suddenly start managing like it’s Game 7 of the World Series? Maybe even more intensely; it’s much rarer to throw a perfect game than it is to win a World Series.
Drew Waters strikes out [swinging]. Nicky Lopez steals second base.
Drew Waters swings at all three pitches as he strikes out, according to the record books. This is empirically false; we can watch a video of strike three getting called against Drew Waters while Nicky Lopez runs to second. An attempted tag slams Lopez in the head and there’s a delay to check on him, but he stays in the game.
Nick Pratto strikes out swinging
The strikeout pitch was a changeup well below the strike zone, but I’ve lost confidence in the accuracy of historical data and still watched a highlight of the pitch just to confirm that Pratto actually did swing at it. He did.
Vinnie Pasquantino singles on a ground ball to left fielder Alec Burleson. Nicky Lopez scores
Steven Matz’s shutout relief outing is over, as is his relief outing in general. Matz leaves the game after throwing 50 pitches in 2.2 innings, striking out four and walking none while giving up two hits and one run, both of which came this inning.
See? You would’ve totally forgotten that he hit two batters.
Drew VerHagen replaces Steven Matz pitching
Jackie Bradley Jr. pinch runs for Vinnie Pasquantino
Drew VerHagen made it to MLB in 2014 with the Detroit Tigers and stuck in the organization through the 2019 season. After leaving Detroit, VerHagen spent two years pitching for the Hokkaido Nippon-Ham Fighters and performed well enough to earn a two-year contract from the Cardinals. The first of these years went poorly, as VerHagen only threw 21.2 ineffective innings before having season-ending hip surgery. Things were more optimistic in 2023, with VerHagen’s 2.87 FIP suggesting that his already adequate 3.46 ERA had room to improve.
Salvador Perez strikes out swinging
VerHagen throws five pitches to Perez and every one of them is well outside of the strike zone. A couple are also too low. Perez swings at both of those after fouling off another ball to strike out.
The Royals have now left 11 runners on base this game, most of which have been in scoring position. This futility will have no impact on the outcome and nobody will ever really care about it.
1 run, 2 hits, 0 errors, 1 LOB. Royals 4, Cardinals 0.
Bottom of the 8th, Cardinals Batting, Behind 0-4, Royals' Mike Mayers facing 4-5-6
There are a few arguments as to what Matt Quatraro should’ve done here, which we’ll try to cover in reverse order of merit.
At the most basic level, it is wrong to remove a pitcher from a perfect game attempt. The conventional wisdom certainly doesn’t apply here, as Mike Mayers was never given an opportunity to pitch a perfect game. He arguably only came in when Josh Staumont was removed from a perfect game attempt. It’s really impossible to know for sure with no combined perfect games as precedent; maybe there’s substantially more valor in a two-pitcher combined perfect game than in a four-pitcher combined perfect game.
On the other hand, it’s irresponsible to keep relying on the same reliever for this long. 6.0 innings is already a new MLB career-best for Mike Mayers. He hasn’t thrown more than six in any professional appearance since June of 2017, when he threw seven shutout innings as a member of the Memphis Redbirds. In his only good MLB seasons (2020 and 2021), he never eclipsed two innings at a time. He gave up his two hardest-hit balls last inning.
But maybe Mayers’ past usage in other organizations shouldn’t dominate how Quatraro views him today. After all, the Royals didn’t hire Mike Mayers to be a relief pitcher and weren’t using him as such at AAA. For all intents and purposes, Mayers is a starting pitcher who entered the game in the second inning for reasons of strategy and gamesmanship. He’s thrown 71 pitches today and has eclipsed that number in five of the eight starts he made for Omaha. He threw 84 against the Tigers last week. But how many more pitches do you want from him exactly? If he’s not going to finish the game, why not pull him sooner rather than too late?
There’s a lot that could’ve been considered, but we know what’s about to happen, so we can identify the argument that should’ve won out. Here are the slash lines for batters in 2023 based on how many times a starting pitcher has faced the order:
1st time through the order: .246/.312/.414 (43212 PAs)
2nd time through the order: .254/.318/.429 (40323 PAs)
3rd time through the order: .267/.330/.454 (22027 PAs)
The improved slash lines as the batting order repeats demonstrate the greater degree of difficulty in getting the same hitters out three times in a row when you can only throw the pitches in your arsenal. The halving in number of plate appearances for pitchers facing the order a third time demonstrates that this phenomenon is something of conventional wisdom in 2023 – managers are now likely to pull their pitchers before opposing hitters have the chance to see them a third time.
The sample for relievers facing a batting order repeatedly is small enough to be ignored, but even more stark if you irresponsibly choose not to:
1st time through the order: .240/.323/.391 (73261 PAs)
2nd time through the order: .263/.326/.448 (4032 PAs)
3rd+ time through the order: .290/.347/.530 (443 PAs)
Managers don’t let their bullpen arms face the batting order a second time, and they REALLY don’t let them face a batting order a third time. When they do, it doesn’t go well.
Nick Pratto moves from LF to 1B
Drew Waters moves from CF to LF
Jackie Bradley Jr. moves from PR to CF
Quatraro seems to be aware enough of the moment to improve his defense. Jackie Bradley Jr. won a Gold Glove playing center field in 2018 and takes over the position, pushing the defensively-gifted Waters into left and the defensively-limited Pratto back to his more-natural home at first.
Nolan Arenado singles on a sharp line drive to left fielder Drew Waters
Back in the 2nd inning, Arenado took the first five pitches of his at-bat. The first four were sinkers, but the fifth was a slider that landed right in the middle of the strike zone.
Both pitches that Mayers throws this at-bat are sliders. The first is well outside, but the second comes down the middle. Arenado remembers the arc of this pitch from his second inning at-bat and waits patiently to scorch it into shallow left field, too hard and low for any fielder to make a play on it. The xBA of this hit is .920 and the crowd stands and cheers as Waters throws it back into the infield.
The perfect game is over, along with any consolation that a no-hitter would’ve offered.
Willson Contreras singles on a ground ball to center fielder Jackie Bradley Jr.; Nolan Arenado to 2nd.
Willson Contreras flips his bat on this single up the middle, which is way cooler when you’re the first hit to break up the perfect game instead of the second hit in a game that you’re losing 4-0. The game isn’t exactly “close,” but the Cardinals have increased their win probability by a cumulative 7.9% with these two singles.
After 76 pitches, Mike Mayers’ day is done. He threw six perfect innings, but then he allowed two hits.
Taylor Clarke replaces Mike Mayers pitching
I would be sort of irritated if I were Taylor Clarke. It’s almost impossible to imagine a circumstance where a reliever looks at an ongoing perfect game from a bullpen and thinks “why am I not getting ready to enter this game,” but surely the thought crossed his mind as nobody warmed up during a long top of the 8th inning. By the time he comes in for Mayers, he’s just trying to protect a shutout.
It feels similarly rare for a reliever to feel less pressure coming in after the prior pitcher gave up two singles than he would entering a clean game. These baserunners don’t carry the weight of history like their absence did.
Brendan Donovan pops out to second baseman Michael Massey on the infield fly rule
Paul DeJong flies out to right fielder MJ Melendez
Alec Burleson pops out to first baseman Nick Pratto
Clarke throws seven pitches to retire three batters. He doesn’t throw a fastball until the seventh pitch. All three batters hit pop ups, none of which are remotely close to falling for hits.
For his clean inning of work, Clarke is awarded with a hold, a mathematically correct outcome that nevertheless seems baffling from the perspective of any inning of the game except for this one.
0 runs, 2 hits, 0 errors, 2 LOB. Royals 4, Cardinals 0.
Top of the 9th, Royals Batting, Ahead 4-0, Cardinals' Drew VerHagen facing 4-5-6
Bobby Witt Jr. homers on a fly ball to left center field
As a reminder, Witt entered this game with a slash line of .232/.270/.438 for the season. After this game, Witt finished the year with a slash of .300/.344/.525. It is probably reductive to say that Bobby Witt Jr. figured things out while facing Drew VerHagen in the 9th inning of this Memorial Day game, but maybe it’s not.
MJ Melendez walks
The first three balls are nowhere near the strike zone. The fourth ball does miss the zone, but is close enough for somebody in the crowd to yell “strike three” and then groan when it isn’t. “Ooh, that’s been a strike a lot of the day,” the broadcasters yelp, ignoring that for a lot of the day the guy pitching was Adam Wainwright and now it’s Drew VerHagen.
Michael Massey homers on a fly ball to right field; MJ Melendez scores
Perhaps scarred from allowing a full count walk with a pitch on the corner, VerHagen starts the at-bat with a dead-center fastball that Michael Massey immediately wallops for a home run.
Freddy Fermin pops out to shortstop Paul DeJong
By now, the Cardinals have accomplished all that they can reasonably expect to accomplish in this game. Today, that just means “secure at least one baserunner,” which they did. Nobody is under an illusion that a team that needed a third look to hit Mike Mayers is going to make up a seven-run deficit in the bottom of the ninth, which means the only remaining secondary goal is to get the outs required to finish the game.
As you may recall, the Cardinals have been playing for 18 straight days and would love to not use more pitchers than necessary. Despite the home runs, this is Drew VerHagen’s game, and he reclaims authority over it by getting Fermin to pop out.
Nicky Lopez singles on a ground ball to right fielder Tommy Edman
That’s not going to facilitate your goals, Drew.
Drew Waters singles on a line drive to center fielder Oscar Mercado; Nicky Lopez to 2nd
Statistics are better in baseball than in other sports because the individual’s control over their performance will almost always override the team context. If Drew Waters played football or basketball and his team had this scope of lead, his coach would make him play to run out the clock and secure the victory. But that’s not an option here, and Drew Waters is 0-for-4 with three strikeouts. He still needs to answer the question of whether he belongs in MLB and every plate appearance produces evidence on one side of the ledger or the other.
Waters watches two pitches, then gets a fastball down the middle. He makes easy contact and lines a single to bring his performance up to 1-for-5. Every Royals starter has now contributed to their offense’s performance (Freddy Fermin is hitless, but has an RBI).
Nick Pratto singles on a fly ball to left fielder Alec Burleson; Nicky Lopez to 3rd, Drew Waters to 2nd.
This is the fifth time in Nick Pratto’s MLB career that he’s had at least three hits in a game and it may be the final time. After giving Pratto 182 plate appearances in 2022 and 345 plate appearances in 2023, the Royals gave Pratto 0 MLB plate appearances in 2024 and mostly left him at AAA. Technically, Pratto did play for the 2024 Royals, but only in bizarre fashion when he came in to pitch the 9th inning of a game that the Royals were losing 10-1. Pratto didn’t give up any runs and somehow got the first batter he faced to strike out despite never pitching in any previous professional context.
A base-loading single from Nick Pratto is the final straw for Drew VerHagen’s back (he’s a camel in this mixed metaphor). This is VerHagen’s worst outing of 2024, by some distance. There were three other occasions where he allowed three runs, but this is the only one where he couldn’t finish an inning. Furthermore, he leaves with the bases loaded and will be lucky if the three runs allowed so far are the only ones he’s charged with. His ERA has jumped to 4.39 and the FIP has swelled by more than a run to 3.89.
After the 2023 season ended, VerHagen failed to attract interest from an MLB team and rejoined the Hokkaido Nippon-Ham Fighters. It’s impossible to prove that he would’ve received an MLB contract if not for the negative impact of this appearance on his season numbers, but it’s equally difficult to disprove that claim.
Chris Stratton replaces Drew VerHagen pitching
The only players appearing in this near-perfect game who will pitch for the 2024 Royals are current Cardinal Chris Stratton and current first baseman Nick Pratto.
Jackie Bradley Jr. strikes out swinging
The plan was not for Jackie Bradley Jr. to “hit.” He entered the game as a pinch runner with two outs in the eighth inning. Matt Quatraro did everything he could reasonably do to get Jackie Bradley Jr. into the game without making him step into the batter’s box.
Jackie Bradley Jr. had 14 hits in 2023, all of which had already been recorded by May 23. This was the 26th of 29 times that he struck out that year. In two weeks, the Royals would designate him for assignment and he would end up being released. He didn’t play in MLB again that season or in 2024.
Matt Duffy pinch hits for Salvador Perez, batting 3rd
The way that baseball teams reassert control over game state from individuals is through their use of substitutions. If you put Salvador Perez up to bat with the bases loaded in the ninth inning, he’s going to try to hit a home run regardless of whether the team “needs” it. If you put Matt Duffy up to bat with the bases loaded in the ninth inning, he’s also going to try to hit a home run, but his efforts are substantially more likely to end in futility.
Matt Duffy flies out to center fielder Oscar Mercado
All three pitches Duffy sees are “hittable,” but that word usually implies a more capable hitter. Duffy flies out harmlessly to center field.
Not that it matters, but the Royals conclude their tally of runners left on base at FOURTEEN. They go 12-28 (.429) without runners in scoring position but 4-16 (.250) with them there. Two of those four hits don’t result in RBIs. If a tree is unclutch in the forest but anybody who would be around to notice it is throwing a near-perfect game, does it make a sound? I’m really losing grasp of the metaphors.
3 runs, 5 hits, 0 errors, 3 LOB. Royals 7, Cardinals 0.
Amir Garrett replaces Taylor Clarke pitching
It’s tricky to disentangle Matt Quatraro’s motivations here. After trying to stretch Mike Mayers for seven innings and losing a shot at history in the process, he is now pulling Taylor Clarke after seven pitches. Clarke has already thrown two relief innings three times this season, but sticks to one here.
Amir Garrett has been walking batters at such an absurd rate in 2023 that it’s easy to see why he wasn’t trusted to protect an active perfect game. Garrett has walked 14 of the 53 batters he’s faced in his 12 most recent games, a walk rate so comically high that you legally aren’t allowed to calculate it.
Tommy Edman strikes out swinging
I could’ve stopped writing when Mike Mayers gave up two hits, but you didn’t stop reading either, so we’re both trying to experience this complete pitching performance as a “near-perfect game.” Do your best to erase those two hits from your memory and then imagine this Tommy Edman vs. Amir Garrett at-bat in the ninth inning with history on the line:
Pitch 1 is a fastball that soars above the zone. 1-0.
Pitch 2 is a sinker over the plate. 1-1.
Pitch 3 is a sinker that’s slightly higher up. 1-2.
Pitch 4 is a slider near the ground. 2-2.
Pitch 5 is even higher than pitch 1. 3-2, full count.
Pitch 6 is a sinker inside, but Edman fouls it off. 3-2.
Pitch 7 is a slider that catches the corner, but Edman fouls it off. 3-2.
Pitch 8 is a slider inside, but Edman fouls it off. 3-2. The hypothetical crowd is going ballistic.
Pitch 9 is a slider that might’ve caught the corner, but Edman fouls it off. 3-2.
Pitch 10 is a high slider that Edman swings through for strike three. The hypothetical air pockets from collective groans in St. Louis and roars in Kansas City converge to cause hypothetical tornadoes in Jefferson City.
This could have been one of the most memorable regular season at-bats in the history of the Kansas City Royals. Instead it’s among the most forgettable.
Oscar Mercado strikes out swinging
Garrett remains in the zone more consistently and Mercado is flailing. Maybe we’d have more perfect games if Oscar Mercado could hold down an everyday job. The closest he comes to success is hitting the fourth pitch foul before whiffing on pitch five.
Juan Yepez pinch hits for Paul Goldschmidt, batting 2nd
Juan Yepez grounds out softly to first baseman Nick Pratto
The game ends with a whimper. The 33.6 mph exit velocity on Juan Yepez’s ground ball is the slowest contact of the game and the slowest on any of his batted balls that season. Nick Pratto lets its path die in his glove and then calmly steps on first for the final out. Amir Garrett has completed a perfect inning.
0 runs, 0 hits, 0 errors, 0 LOB. Royals 7, Cardinals 0
The Royals have completed some form of team achievement, but it’s hard to tell exactly what it is besides the lukewarm “combined shutout,” a feat so boring that two other teams accomplished it the same day. The broadcasters cheerily call it a “nearly perfect” afternoon for the Royals, which is accurate but almost seems to undersell it. Kansas City actually got nine perfect innings from the four pitchers they used: Josh Staumont threw one, Mike Mayers threw six, Taylor Clarke threw one, and Amir Garrett threw one. If not for the mishap of letting Mayers face two more batters in an inning that probably shouldn’t have been his, these four pitchers could’ve been immortalized.
Instead, they’ve proven to be exceptionally mortal. Mike Mayers got the win for this game, which was his first and last win of the season. Mayers made three more appearances for the Royals and allowed 16 earned runs before being returned to AAA. He hasn’t been back to MLB since, and his only action in 2024 consisted of 41.1 ineffective innings over 31 appearances for the AAA Buffalo Bison. Taylor Clarke didn’t pitch in MLB in 2024, either. Amir Garrett’s mortality was uncomfortably literal; after this appearance, he was placed on the injured list with an elbow malady called “valgus extension overload.” Garrett made four more appearances for Kansas City in 2023 and then six appearances for the Los Angeles Angels in 2024, the last of which was on May 14.
On the one-year anniversary of this near-perfect game, the only contributing pitcher who could still credibly claim to be a major leaguer was Josh Staumont. After recovering from thoracic outlet syndrome, Staumont debuted for the Twins on May 9, 2024 with a shutout inning. By May 29, 2024, he had made seven appearances without allowing a run. By June 29, 2024, Staumont had made 16 appearances without allowing an earned run (an inconsequential unearned run snuck by in one appearance). He would extend this streak of shutout appearances to 19 before self-destructing. Staumont allowed five earned runs over his next four appearances to boost his season ERA from 0.00 to 1.88. On the fourteen-month anniversary of his broach with perfection, Josh Staumont got shelled by the Mets, allowing five earned runs while getting one out to send his season ERA up to a normal-looking 3.70. He was designated for assignment the next day and didn’t return to the majors for the rest of the season.
The combined perfect game remains uncharted territory.
I also notice there were no trades in here. Does this mean you're branching out some in topics? This long long long form writing style seems quite compatible with mine, so if you plan to continue to write historical pieces like this, hit me up. We can collaborate on something sometime down the road.
We've all been in the advanced metric baseball bubble for so long that everybody knows that the manager's role is dreadfully unimportant. Local media and fans will act like the manager is the most important hire an organisation can make. It isn't. A good manager can get you (maybe) five wins extra over the course of a whole season. Five wins is a lot (5 WAR players aren't cheap), but managers are like Mike Trout on the Angels. They cannot make or break a team.
However, when you find yourself in a situation like this, all of that rhetoric actually becomes truth, and we see what a poor managerial decision can cost you.
Like you said, this could've been one of the biggest days in the history of the Kansas City Royals. Even as the team got much better this season and went on their playoff run, everybody still would've remembered Memorial Day 2023. They would've remembered it forever, but not now, because Matt Quatraro messed this up. Badly.
I have nothing against Matt Quatraro. He's fine at his job, but we all make mistakes, and he picked the worst possible time to make his. That eighth inning was the only decision of consequence he had to make in the entire 2023 season. Barring a miracle, it will be the most important decision of his entire managerial career. Perfect games are harder to win than World Series, so a game seven decision won't match the importance of this. Nothing can match this, which makes this one of the biggest (possibly the biggest) managerial botch I've ever seen.
What the heck is with letting Mike Mayers pitch the eighth inning? It's almost paradoxical, in that it's a decision that makes sense if there weren't a perfect game happening. In that circumstance, it's likely the same decision I would've made. There's nothing to lose anyway, but under the circumstances that actually existed this is one of the worst managerial decisions I've ever seen. I don't want to be a conspiracy theorist, but it's almost like Matt is trying to cost his team this achievement. Why one would do that I don't know, but how else do you explain this?
It's possible Matt believed that somehow a perfect game thrown by two people is better than one thrown by four, but if that's the case I would lose a lot of respect for Matt Quatraro, because that makes negative sense, so I'm going to choose not to believe that, which leaves us with what? Either he thought this was a good idea, he just didn't care, or he didn't want his pitchers to throw a perfect game, and I'm not sure which of those three possible motivations is the most unacceptable. If he truthfully thought this was the best way for his team to not allow any baserunners, he is a terrible manager. If he just didn't care, that's likely the most acceptable of these three outcomes, but why expend two more pitchers then? If he did not want the Royals to have this achievement for themselves, he ought to be fired immediately.
There are galling managerial decisions, and then there's whatever this was. It's too strong to call it a fireable offence, but it's not strong enough to call it unacceptable. I respect you buddy, for working to keep this memory alive.