In the mid-1980s, MLB teams colluded to keep player contracts — both in terms of length and dollars — from getting out of control. And while we’d stop short of using the c-word to describe the last two offseasons, there are some stunningly similar situations playing out before our very eyes.

Dallas Keuchel and Craig Kimbrel are both sitting at home twiddling their thumbs as teams now wait for the MLB draft — early next month — to pass so they can be signed without draft pick compensation being required. Future Hall of Famer Tim Raines was in the midst of his prime when he had to miss the first month of the season in 1987 because the deadline to re-sign with his original club had passed.

Fast-forward back to 2019, and the Minnesota Twins are the class of the American League Central and among the best teams in either league — just one year after a disappointing 78-84 finish led to a managerial firing and quite a bit of roster turnover.

For the second year in a row, the Twins moved slowly — or maybe deliberately is the better word — in the free-agent market, grabbing players at peak value to add to an existing roster of exciting, but unproven youngsters.

For the first year in a row, it’s actually working.

The Twins come into Wednesday’s series finale with the Los Angeles Angels with the potential for a sweep and with a record of 32-16. For those — such as myself — who aren’t mathematically inclined, that’s twice as many wins as losses. It’s the first time the Twins have been 16 games above .500 since the end of the 2010 season — the inaugural year of Target Field.

That feels like so long ago, doesn’t it?

There’s plenty of credit to go around and no shortage of worthwhile recipients for it. That includes guys like Byron Buxton, Jorge Polanco and Mitch Garver from within, but also pretty much every player the Twins brought in from the outside.

C.J. Cron is mashing home runs you could hang laundry on. Jonathan Schoop has more than replaced Brian Dozier. Marwin Gonzalez has gotten red-hot in the month of May and looks like he’s willing to play just about anywhere to keep this thing going. Nelson Cruz was mashing until a wrist injury shelved him. On the pitching side, both Martin Perez and Blake Parker have been better than advertised.

That’s kind of a lot of players to add in one offseason, isn’t it? It’s almost like the Twins had a bunch of payroll room clear up and…nah. We won’t go there, but it isn’t only because Joe Mauer came off the books that the Twins were able to make these moves.

The Twins were able to add all these players because the free-agent market is broken — and they were one of the few teams willing to glue the pieces back together.

Let’s look at each player individually:

C.J. Cron

For the second year in a row, the Tampa Bay Rays made the baffling decision to move on from a productive player whose salary should not have been cost-prohibitive. After 2017, that player was Corey Dickerson, who went on to hit .300/.330/.474 for the Pittsburgh Pirates while making a tidy $5.95 million.

Even if the Rays want to cry poverty, that’s hardly a kingly sum for a player who still had two years of club control and was coming off one of the best seasons of his career. Also, it’s not like the Pirates are the gold standard for taking someone else’s overpaid veterans — they might even be the NL’s answer for the Rays in that respect.

This time around, it was Cron getting the boot, as he was non-tendered after crushing 30 home runs in 140 games for the Rays — both career highs. Ask Cron about his breakout season last year, and he’ll tell you the biggest thing was just having the opportunity to play every day, something that wasn’t afforded to him with the Angels before they traded him to Tampa.

So Cron hit .253/.323/.493 for the Rays, and they decided to dump him with — get this — two years of club control left. Now, less than one-third through the 2019 season, Cron is on pace to beat every mark he set last year while playing sterling defense at first base.

Cron isn’t a Twin right now if the Rays aren’t playing along with this idea that teams aren’t making money hand over fist.

Jonathan Schoop

This one cuts both ways. Maybe the Orioles — who have capably replaced Schoop at second base with one of the players he was traded for, Jonathan Villar — don’t feel any sort of pressure to move Schoop at the trade deadline last year if the market squeeze wasn’t in play.

Or maybe even if they did move him, maybe the Brewers wouldn’t feel it was necessary to non-tender Schoop when he was expected to get something like $8-9 million in his final year of arbitration. To be fair, Schoop struggled badly with the Brewers, but $8-9 million is worth about one win on the free-agent market.

Schoop has already been worth one win via Baseball Reference’s WAR and he’s at 0.9 WAR via Fangraphs — a value of $7.6 million.

That’s $100,000 more than his $7.5 million salary with the Twins this year. In a normal market, Schoop probably isn’t a Twin.

Marwin Gonzalez

No matter how you view Gonzalez, he’s somewhere between a championship-caliber role player or the second coming of Ben Zobrist.

Neither of those is a bad thing.

Yet for some reason, the Houston Astros couldn’t find room for him. To be fair, they’ve patched it together with Aledmys Diaz and Yuli Gurriel, but there’s no denying that Gonzalez has played a key role for some very good Astros teams. As his price dropped during the offseason, it was more than a little surprising the Astros didn’t entertain the thought of a reunion.

But while the rest of the market stayed away from Gonzalez, the Twins jumped in and got him for two years and $21 million — far less than expected. Fangraphs had Gonzalez listed as their No. 15 free agent this offseason, with Kiley McDaniel projecting a contract of three years and $39 million.

The Twins got him for less than that, both in terms of years and average annual value.

Coll…sorry, call it what you want, but the Twins again pounced at the perfect time. Gonzalez filled in capably at third base while Miguel Sano was recuperating from a laceration on his heel, and Rocco Baldelli will now be faced with a good dilemma — where to play Gonzalez every day once everyone is healthy.

Considering Gonzalez is hitting .358/.427/.552 in May, that’s a good problem to have.

Nelson Cruz

The market for Cruz was always going to be deflated because of the need for him to be some team’s primary designated hitter, but that there was so little interest in Cruz this offseason was completely baffling.

Cruz was heading into his age-38 season, but had 11 straight seasons with an OPS+ mark over 100 and had averaged 41 home runs over the last five seasons. Outside of the wrist injury that has hampered him recently, Cruz’s production with the Twins through his first 35 games is right in line with his career numbers:

2019 – .270/.354/.508 (129 OPS+)

Career – .274/.342/.518 (129 OPS+)

That the only competition for Cruz’s services was the aforementioned Rays — a veritable house of cards, if you will — was absolutely inexplicable, and the Twins capitalized with a one-year deal worth $14 million with a team option for 2020.

One could argue that Cruz might not have gotten much more than that in a normal market, but he should have been able to get the second year guaranteed, even at 38.

Martin Perez

Nobody would make the mistake of saying the end of Perez’s tenure with the Rangers was particularly successful, and over seven years with the team he had compiled a 4.63 ERA with just 5.5 strikeouts per nine innings (K/9). But still, the Rangers — the only MLB organization he’s ever known — held a modest $7.5 million option on Perez, who was entering his age-28 season.

Instead, they cut him loose and the Twins scooped him up for $3.5 million with a $7.5 million team option for next year. Basically, the Twins got him for almost half his 2018 salary and kicked his 2019 option down the road a year.

What the Twins have received has been quite a boon, as the option now feels like a virtual certainty to be picked up as a revitalized Perez has posted a 2.89 ERA with a strikeout per inning through 53 innings.

That $7.5 million option would have likely been picked up in any other year, but the Rangers’ loss was the Twins gain here. This one could hurt big time for the Rangers, as pitchers rarely hit free agency when they’re 27 years old, short of being a Stephen Strasburg-esque phenom.

Blake Parker

This one never made any sense. Parker, one of baseball’s most valuable relievers in 2017, took a step back in 2018 due to allowing more than his fair share of homers, but ultimately was still fairly useful as a back-end reliever who had two years of club control left and an expected salary of about $3 million.

Instead, the Angels non-tendered Parker and replaced him with a worse reliever in Cody Allen, who has been an unmitigated disaster for the Angels. Allen has a 4.80 ERA (7.15 FIP) with 18 strikeouts and 15 walks in 15 innings of work. He’s also allowed four homers in that stretch, while Parker has a 1.10 ERA (3.88 FIP) and has been absolutely brilliant since his first appearance as a Twin: 0.59 ERA, .483 OPS against and 12-6 K/BB in 15.1 IP.

Oh, and the Twins are paying Parker $1.8 million plus incentives while the Angels are paying Allen $8.5 million.

That’s not necessarily a prohibitive sum for Allen, who as recently as 2017 was a very effective reliever, but it should have tripped some triggers that neither Cleveland (his original team) nor the Twins (Derek Falvey factor) showed interest in Allen at even this modest of a sum.

So there you have it. If even half of these moves don’t happen, this Twins team looks drastically different — and perhaps worse. Hats off to Falvey and Thad Levine for reading the market perfectly and acting to give Twins fans a much-needed capable ballclub.