Bryce Harper signed a record-breaking $330 million contract with the Phillies as a free agent. Manny Machado signed a $300 million contract with the Padres as a free agent. Neither is a 2019 All-Star.

Tommy La Stella, traded in the offseason from the Cubs to the Angels for a player to be named later after hitting 10 career home runs in five major league seasons, is a 2019 All-Star. He's one of 31 first-time All-Stars -- almost half of the 64 players on the two rosters. La Stella will make $1.35 million this season -- or less than Harper will earn on average every 10 games over the life of his 13-year contract.

As they say: You can't predict baseball.

The reserves for the two All-Star squads were announced Sunday, and as always, there were some snubs, a couple of surprises and someone from every team, including the Orioles and Mariners. Let's go over the rosters and weigh where things went right and where things went wrong.

2019 MLB All-Star Game

The Futures Game, Home Run Derby and the Midsummer Classic were at Progressive Field in Cleveland. Full coverage »

Remember the roster rules: The fans vote for the position player starters, the players vote for a backup at each position (including three outfielders) plus five starting pitchers and three relievers, the rosters consist of 20 position players and 12 pitchers, and -- as you know! -- every team must have a representative.

No Harper, no Machado. I wouldn't classify either one as a big snub, though I had named both to my personal All-Star team. In Machado's case, he was battling a crowded field at third base in the National League, and his recent surge at the plate -- he has hit .424 with 10 home runs since June 13 -- came too late to beat Anthony Rendon and Kris Bryant in the player vote. (Nolan Arenado is the NL starter at third base.)

Rendon deservedly makes his first All-Star team. In picking my team, I had Machado in a coin flip over Bryant for my final roster spot, but Bryant over Machado is perfectly reasonable, given that both players are proven stars.

Harper's case rested more on his making it as either the Phillies' lone pick or maybe squeezing in as a backup outfielder from a field that lacked any clear choices. J.T. Realmuto made it as the Phillies' rep as a third catcher behind starter Willson Contreras and Yasmani Grandal. The NL roster includes only the three outfielders the players voted in: Charlie Blackmon and David Dahl of the Rockies and Jeff McNeil of the Mets.

The numbers:

Blackmon: .337/.383/.653, 20 HRs, 56 RBIs, 2.1/1.8 WAR

Dahl: .317/.362/.552, 12 HRs, 51 RBIs, 1.4/1.4 WAR

McNeil: .348/.412/.5098, 6 HRs, 34 RBIs, 2.3/2.7 WAR

Harper: .250/.368/.471, 15 HRs, 59 RBIs, 1.8/0.8 WAR

Did Harper deserve to make it based on numbers? No, especially if you look at that Baseball-Reference WAR figure. Going with Realmuto over Harper (or Rhys Hoskins) is certainly reasonable.

Dahl is the surprise here, as the players apparently vastly underrated park effects in their voting. Why Dahl, for example, over Juan Soto (.297/.402/.534, 14 HRs, 52 RBIs)? Dahl has had some big, late-inning hits for the Rockies, but it's almost like the players just looked at batting average and ignored that Dahl plays for the Rockies.

The biggest NL snub: Max Muncy. Still, the NL roster is really good. Dahl is the only selection that stands as a surprise, and it's not like he's a bad choice. In fact, 18 of the top 21 NL position players in FanGraphs WAR made it on the roster, with the exceptions being Muncy (tied for sixth in WAR), Eduardo Escobar (17th) and Machado (19th).

ESPYS Voting: Best MLB Player

Which MLB star has shined the brightest? Let your voice be heard, and then tune in to The 2019 ESPYS presented by Capital One at 8 p.m. ET July 10 on ABC. Vote now!

Muncy ranks tied for fourth among NL position players in bWAR, which easily qualifies him as the biggest NL snub. But it's understandable that he just missed (unfortunately, he was also snubbed last season). He was considered a first baseman for the voting process, and Freddie Freeman won the fan vote, with Josh Bell and Pete Alonso as backups. Both are deserving selections, and Bell is the Pirates' lone rep. The other positions with two backups are catcher, third base and shortstop (Paul DeJong and Trevor Story). DeJong is the Cardinals' only rep. Story is currently on the injured list but is expected back this week, so there's no clear injury replacement path as of yet for Muncy.

Three Dodgers starting pitchers make it:Hyun-Jin Ryu was the easy choice and probably is the leading candidate to start the game, and Clayton Kershaw and Walker Buehler also made it. That makes the Dodgers just the fifth team in 20 years with three starting pitchers to make the All-Star Game:

The NL pitching staff works for me. I had 10 of the 12 picks on my roster, with the only differences being Caleb Smith over Sandy Alcantara as the Marlins' rep and Cole Hamels over Mike Soroka. Soroka, with his 9-1 record and 2.13 ERA, is having a terrific first half, so no argument there. Hamels landed on the IL after we ran our rosters on ESPN.com, so Soroka would have been my next choice.

Biggest AL snub: Xander Bogaerts. While 18 of the top 21 NL position players by FanGraphs WAR made the league's roster, in the AL only 11 of the top 21 made it. This is mostly the result of two factors: position crunch (too many of the best players at the same positions) and needing a player from all those bad AL teams.

We end up with three DHs on the AL roster (Daniel Vogelbach is the Mariners' rep) and two backup second basemen (La Stella and Royals rep Whit Merrifield) but no Xander Bogaerts, who entered Sunday ranked second in FanGraphs WAR among AL position players and tied for 12th in Baseball-Reference WAR.

Francisco Lindor beat Bogaerts as the backup shortstop. Yes, Lindor missed time, but he's obviously one of the best players in the game, and considering that the All-Star Game is in Cleveland, I'm glad he made it. Bogaerts is having a better season than teammates Mookie Betts and J.D. Martinez, who made it as backups, but I'm fine with those two being on the team, given that they're having good seasons and are two of the biggest stars in the game.

Pham versus Austin Meadows: Speaking of Pham ... this is interesting. Pham has been vocal about the All-Star selection process, perhaps aware that he might end up on the short end of things. A couple of weeks ago, he complained that the big-market teams have an advantage in the voting. That's true, though it's worth noting that no Red Sox made it this year as starters, and they're the defending World Series champs (Bogaerts wasn't even one of three finalists at his position). Also, players from the Twins, Rockies, Brewers and Diamondbacks got voted in as starters.

Editor's Picks

Pham later suggested in an interview with DRaysBay that the rosters should be determined by a combination of games played, wRC+ (weighted runs created) and WAR. "Those three things should determine the position player All-Stars," he said. "wRC+ is an important stat offensively and neutralizes park factors. WAR is your overall contributions. I think those three things should be the determining factors which determine All-Stars."

Part of Pham's concern is that making an All-Star team can factor into the arbitration process. Pham had a good case as one of the three backup outfielders -- not as good as that of Betts or Joey Gallo, but I had him on my team. Instead, his teammate Meadows beat him in the player vote:

Meadows: .291/.366/.516, 12 HRs, 41 RBIs, 2.0/1.8 WAR

Pham: .284/.384/.468, 13 HRs, 35 RBIs, 2.2/2.5 WAR

Pham was the better choice, especially because Meadows had no track record heading into this season, other than as a prospect. It's pretty easy to see what happened: Meadows got off to that booming start, and that lingers in the mind more than a hot May or hot June. So Pham lost out (though Kepler probably has a better case than Pham anyway).

The new-look AL pitching staff.Blake Snell, Corey Kluber, Chris Sale and Trevor Bauer finished first, third, fourth and sixth in the 2018 Cy Young voting, but none of them made it, due to performance and/or injury (though Sale ranks second in FanGraphs WAR, thanks to excellent peripherals). No arguments about Justin Verlander, Gerrit Cole or Mike Minor making it, and Lucas Giolito's emergence has been one of the best stories of the season. Marcus Stroman makes it as the Blue Jays' rep (and is having a solid season), and Shane Greene makes it as the Tigers' rep (he has an 0.87 ERA, though he has allowed five unearned runs in addition to three earned runs).

Lance Lynn leads AL pitchers in FanGraphs WAR and ranks third in Baseball-Reference WAR, but his ERA is 4.00, so the players overlooked him. I was also surprised that Jose Berrios didn't make it. He's 8-4 with a 2.89 ERA and 102 strikeouts in 112 innings. Twins teammate Jake Odorizzi made it instead. He's 10-3 with a 2.73 ERA but has thrown just 85 innings and was nowhere near as good as Berrios last season. (Again, this is probably more about the timing of when the players vote. Odorizzi had a 1.92 ERA on June 9.)

Orioles rookie John Means is probably the biggest "who is he?" All-Star in a long time. An 11th-round pick in 2014 out of West Virginia, he had one major league appearance last season and a 3.72 ERA in the minors. Baseball America did not include Means among the Orioles' top 30 prospects -- he turned 26 in April, old for a prospect, and he doesn't light up the radar gun -- and the Orioles don't have a great farm system.

He made the Baltimore roster out of spring training as a reliever but was soon moved into the rotation. Now he's 7-4 -- almost a third of Baltimore's 24 wins -- with a 2.50 ERA, and he ranks fifth among AL pitchers in Baseball-Reference WAR. I have no idea how the rest of his career will turn out. Maybe he just had the best two months he'll ever have.