Most of these teams made the playoffs. A couple of them just missed. The collection of emotions on display ranges from "bitter disappointment" to "satisfied at the measurable growth on display."

Let's write some epitaphs.

Part I: Teams 24-17

Teams 24-17 Part II: Teams 16-9

Teams 16-9 Part III: Teams 8-1

Colorado Rapids (#16)

They got off to an impossibly bad start – the worst start in the league. And then they made changes, and then they made a run, and they actually had a chance to make the playoffs if things had gone right on the last day of the season. They didn't, but still. A GIF is worth a thousand words:

Colorado moved from the pit of despair to become a fast, fun and productive team as soon as Anthony Hudson was dismissed. The rebound started under interim head coach Conor Casey, and then continued – picked up steam, I'd say – when Robin Fraser was named the permanent replacement.

They made some very good roster moves during the spring window, developed a bunch of their younger players and redeemed a few of 2018's more questionable roster choices.

FORMATION & TACTICS: Forget Hudson's games. Under Casey and then Fraser Colorado played primarily out of a 4-2-3-1 that sometimes looked like a 4-3-3 and sometimes like a 4-4-2, usually sitting deep and then using their cadre of speedy attackers to get out on the break.

When they're in possession Fraser appears to have taken a page out of Greg Vanney's book. Like the TFC boss he likes his team to hold the ball on one side of the pitch, draw the opposition to that side, and then play quickly into space on the other side of the field. This has the effect of creating a bunch of semi-transition opportunities throughout the game.

HIGHLIGHT: They went 12-7-4 in their final 23 games, and you could probably just throw a dart blindfolded at that stretch and come up with something pretty, pretty good.

But the best part of it was a three-game stretch from August 31 to September 11 when they took nine points from games against RBNY, Seattle and the Galaxy – all playoff teams. They just murked the Sounders:

This was the stretch when it went from "yeah, they've rebounded after the Hudson debacle and they're probably a half-decent team" to "holy wow, the Rapids are for real."

Seven of Colorado's final eight (which included that three-game stretch) were against playoff teams. The Rapids went 5-3-0 with a +4 goal differential.

LOWLIGHT: 0-9-2 to start the season is it. It doesn't get much worse than that, but it did immediately get better.

REVELATION: There are almost too many to pick from. Rookie of the Year Andre Shinyashiki? USMNT winger Jonathan Lewis? Homegrown US U-23 left back Sam Vines? Homegrown U-20 CM Cole Bassett?

All those guys have a claim, but my vote goes to on-loan third-year CB Lalas Abubakar, who came over in the spring window from Columbus and was a plug-and-play fix for what had previously been the worst defense on the planet. Abubakar was very good in and of himself, but almost more important was that his ability to cover ground made up for the defensive shortcomings of some of his high-priced teammates in midfield and elsewhere on the backline.

It will be very, very interesting to see what price Columbus are able to extract for a permanent transfer.

DISAPPOINTMENT: The injury to Kortne Ford is way up there, as is a winless, frustrating July, but nothing tops the season's first two months. To come out of the gates like that is just inexcusable.

PLAYERS TO BUILD ON IN 2020: FW Andre Shinyashiki, FW Diego Rubio, W Jonathan Lewis, DM Jack Price, RB Keegan Rosenberry, LB Sam Vines

There are more names I could add here, including perhaps Kei Kamara and (hopefully for Colorado fans) Abubakar. If the Rapids just brought back their entire lineup from 2019 with no additions, I think I'd still pick them to make the playoffs.

They've proved to be deep and talented. They also know the pain of starting a season so badly that it costs them any shot at the playoffs. They have to collectively show some maturity this offseason and prove that they're as good as they looked the final two-thirds of the season.

OFFSEASON PRIORITY: I think it's Abubakar, but the Rapids do have eight other CBs on the roster and it's not like Robin Fraser doesn't know how to coach up young defenders. If Columbus ask too high a price, what do the Rapids say?

They also need to figure out center forward. Rubio and Kamara combined for 25 goals, but both of those guys have real limitations, and with three open DP slots nobody would or should be surprised if the front office went out and dropped some serious cash on a new No. 9.

Of course, none of that really matters if the kids don't all take a step forward. Even the league's biggest spenders demand improvement from within – think Latif Blessing at LAFC, or Jordan Morris in Seattle, or Jonathan Osorio for Toronto – and Colorado aren't about to join those ranks. Shinyashiki, Lewis, Bassett, Vines and the rest all need to be better in 2020 than they were in 2019.

That's especially true for 24-year-old CM Kellyn Acosta. He logged serious minutes in 2019, and has the talent to be one of the very best CMs in the league, but falls in and out of games on both sides of the ball far too often. If I was Fraser I'd sit him down and make him watch about 100 hours of Ozzie Alonso and Dax McCarty footage this winter.

San Jose Earthquakes (#15)

A new coach, a few changes, and a new lease on life? The Quakes nearly did the damn thing, going from one of the worst teams of all time almost directly into the playoffs only to come up so, so painfully short. A GIF is worth a thousand words:

Things under Matias Almeyda were historically bad at the start, and then they got pretty good, and then they got really, really really good for a long stretch.

And then in last two months of the season they got really, really bad again as the Quakes finished 2-9-1 and just missed the playoffs. It was brutal.

FORMATION & TACTICS: Almeyda plays a high-energy 4-2-3-1, with one deep-lying distributor and one deep-lying destroyer. One of the wingers is usually a super-direct, go-to-goal scorer, while the other is a playmaker. The fullbacks overlap, the center forward usually runs the channels, and the center backs are asked to play some ambitious passes. They often played gorgeous soccer.

But all that is overshadowed by Almeyda's defensive scheme, which I'll assume you all know by now is pure man-marking once they pick you up in their mid-block (they didn't often press high).

Quakes games looked and felt different than any other games in the league this year. There were more individual battles, and because of that they just seemed more intense. It was compelling viewing.

HIGHLIGHT: El Trafico got all the headlines but the California Clasico was something else this year. San Jose straight-up smoked the Galaxy twice in three weeks, crushing them 3-0 at Stanford and then heading down to Carson for a one-sided 3-1 win:

The Galaxy spent 180 minutes looking like they had no idea what had hit them.

LOWLIGHT: It was probably March, right? San Jose came out of the gates at 0-4-0 with two goals scored and 14 conceded. They were playing the worst soccer on the planet.

But while they were objectively (much, much) worse in March than they were in August and September, it's August and September when the season fell apart and they went from "maybe they'll get a home game" to "damn, they're going to miss the playoffs entirely, aren't they?"

San Jose had two three-game road trips that turned into five hard-fought losses (and one 4-0 hiding at LAFC), which... fair enough. It's tough to win on the road.

But they had two straight at home to close out September and they lost 'em both by a single goal. The 1-0 loss to Seattle on the second-to-last day of the season was particularly gutting, and spelled the end.

REVELATION: Right back Tommy Thompson? On-loan winger Cristian Espinoza? Judson showing to be something of a Diego Chara-lite type of destroyer? Florian Jungwirth as a top-tier sweeper-type of CB? Chris Wondolowski being immortal?

All of them have claims, but it's Jackson Yueill making the leap from little-used youngster to game-controlling regista that painted the picture for this year's Quakes. He was exceptional with his distribution, brave taking the ball in traffic, productive enough in the final third, and showed heretofore unknown defensive bite.

He looks like a centerpiece player for this team going forward.

DISAPPOINTMENT: The wingers. Espinoza wasn't known as much of a goalscorer, but he's got to deliver more than two on the season. Vako had a run of nine games in early summer when he scored seven goals, but only scored one other all year. Carlos Fierro added nothing when he arrived midseason. Shea Salinas overperformed expectations with 6g/3a in about 1400 minutes, but Salinas is a 33-year-old career back-up.

This spot killed the Quakes down the stretch. Plenty of chances were generated, but in the final two months of the season they combined for zero goals. If you're in a playoff race in 2019 and your only reliable goalscorer is a 36-year-old Wondo, you're in trouble.

PLAYERS TO BUILD ON IN 2020: W Cristian Espinoza, CM Judson, CM Jackson Yueill, CB Florian Jungwirth, RB Tommy Thompson, LB Nick Lima

Wondo's back for one last season, and Salinas will probably be back as well, but those guys should be super-subs. They're both good pros, and I'm sure both would happily take that job, but I can't justify putting them in the "players to build upon category." Same for AM Magnus Eriksson, who was fine, but not exactly a match-winner at the No. 10.

For what it's worth I love Lima, but at times he did not seem entirely happy playing left back. And Almeyda was not shy about addressing that.

OFFSEASON PRIORITY: Match-winners are what the Quakes need, one at left wing and one at either center forward or as the No. 10. At no point this season could San Jose go out there, put in a B- effort and walk out with three points based purely on talent. Literally every team that made the playoffs could and did do that from time-to-time.

Beyond that they need to build up some more depth. There have been more than a few whispers around the league that Almeyda's man-marking system demands too much energy expenditure over the course of an entire season, and it's easy to draw a straight line from that to San Jose's belly flop of a final stretch.

In case you're wondering: I don't think those whispers are wrong.

New England Revolution (#14)

Things looked really, really bad. Then they looked pretty good! A GIF is worth a thousand words:

The Revs braintrust made their big move right at the same time that Colorado's did, but 1) New England's hole wasn't quite as deep, given they'd snuck a couple of wins out of the first two months of the season, and 2) the East wasn't quite as tough as the West, so the climb wasn't so steep.

And so New England won just enough and lost hardly at all for the final five months of the season, doing enough of that to slide into the playoffs and get a taste of the postseason.

FORMATION & TACTICS: When Bruce Arena took over I just assumed it would be the low-block, compact, no-frills 4-4-2 that had defined his trophy-filled tenure in LA. But... it wasn't that at all. Bruce tinkered almost constantly over his first three-and-a-half months in charge before finally settling into... yeah, a low-block, compact 4-4-2.

There was a playmaker on the wing, a couple of box-to-box guys in central midfield, a true center forward and an "he only scores goals" second forward. Sound familiar?

HIGHLIGHT: New England had won once in their previous nine entering this game. NYCFC were unbeaten in their previous nine.

It was the second-to-last day of the season, the Revs were staring at a Decision Day trip to Atlanta, and there was still plenty of room for Fire to catch them if things went bad.

They didn't. This was a gut-check win:

The Revs made the playoffs because of it.

LOWLIGHT: Know how you get fired? Finishing off an 0-3-1 stretch with back-to-back five-goal losses. The Revs conceded 18 goals over four games, which is freaking absurd.

With apologies to what the Quakes did in March, it was the worst stretch of soccer from any team in the league this season, and it cost Brad Friedel his job.

REVELATION: Can Matt freakin' Turner count as a revelation for the second year in a row? For some mind-bending reason Friedel didn't play the fourth-year 'keeper over the first two months of the season – after having essentially discovered him and starting him 27 times in 2018 – but Mike Lapper and Arena didn't make that same mistake. Turner was an otherworldly shot-stopper in 2019 (he earned my goalkeeper of the year vote despite playing just 20 games), and justifiably got himself a USMNT call-up.

I'm against calling DPs "revelations," so I'll just say that both Carles Gil and Gustavo Bou more than lived up to their billing.

DISAPPOINTMENT: I'm torn between "Diego Fagundez is a shell of his former self" and "boy did these expensive, veteran CBs not deliver" and "man was high-priced No. 9 import Juan Fernando Caicedo not the guy."

In truth, the latter two issues were probably more determinative in terms of what happened to the Revs throughout the season. But for long-time fans of the team and the league... man, it sucks to watch Fagundez regress. As a 16-year-old he had 2g/1a in 300 minutes. As an 18-year-old he had 13g/7a in 2,300 minutes. Even last year he had 9g/10a in about 2,700 minutes.

As a 24-year-old, just entering his prime in 2019? He had 2g/3a in 1,200 minutes. It was easily his least productive season since he was literally a child.

PLAYERS TO BUILD ON IN 2019: FW Gustavo Bou, AM Carles Gil, W Cristian Penilla, RB Brandon Bye, CB Andrew Farrell, GK Matt Turner

Bou and Gil are both legit match-winners, as is Turner. Bye spent most of the year being at least adequate, and much of it being significantly more than that. Farrell made some mistakes at CB, but was mostly very good and added a real dimension to New England's approach with his ability to get on the ball and dribble past the first line of defense. And while Penilla wasn't quite as good or productive as in his debut season, he was still pretty good.

They've got talent.

OFFSEASON PRIORITY: None of those guys I mentioned are central midfielders or center forwards. The Revs have already gone shopping for one major need – they added veteran left back Alexander Buttner – but have a bunch of spots right up the spine that need addressing, and it's unlikely to come from within as Arena's never been a big "coach 'em up" guy.

I'm guessing we'll see as many as five new starters next season (I'd have said only four, but I remain shook by Arena benching d-mid Luis Caicedo out of the blue in the playoffs).

FC Dallas (#13)

FC Dallas have always been a #PlayYourKids team, but in 2019 they really leaned into it. A gif is worth a thousand words:

Yeah, the whole thing was tenuous and there were long portions where they were clearly hanging on for dear life. The fact is that the kids had to play so much largely because a huge chunk of the veterans on the roster didn't deliver like they were expected to.

But in the end they got it done, got into the playoffs, and then gave eventual MLS Cup champions Seattle real hell in Seattle in the opening round. It was not a great year for Dallas, but it was a very, very good and promising one.

FORMATION & TACTICS: Luchi Gonzalez played around here and there, but for the most part he preferred to play a possession-heavy 4-2-3-1 that was sometimes a 4-3-3. Dallas were one of the best teams in the league at building patiently from the back, and did so with the purpose of dragging the opponents upfield in order to create space for their attackers to run in behind.

When it worked, it was great. When they had to settle into possessing in the attacking third and creating chances against a more static backline, they were less good.

HIGHLIGHT: Final match of the regular season and the playoffs potentially on the line:

Granted, that was much less than a full-strength Sporting KC team, but that's what you're supposed to do at home against an inferior side, right? Dallas had been up-and-down all year, especially in terms of putting the ball in the net, but in that game they just absolutely drilled SKC and earned themselves a playoff berth.

LOWLIGHT: After a very strong start to the season Dallas went into the tank right at the end of April and pretty much stayed there until the Gold Cup was over. From April 27 through June 8 they went 1-4-3 and backed themselves into real danger of dropping below the line – which they eventually would manage.

But yeah, that was definitely their worst stretch of the season.

REVELATION: Paxton Pomykal had always dominated his age group peers with Dallas's excellent academy teams, and then 12 months ago he was a two-way terror on the wing for the US U-20s en route to winning the Concacaf Championship and qualifying for the Youth World Cup.

I figured the then-18-year-old would play significant minutes as a 19-year-old in 2019, maybe on the wing and maybe as a No. 10, and probably a bit as a No. 8. I did not think that he would play significant minutes at such a high level and announce himself as one of the league's very best two-way central midfielders. He made absurd, match-saving defensive plays, he was brave and active about getting on the ball in the toughest spots and toughest moments in the game, and was tidy and secure when he got it. And his passing range...

Enjoy him while you've got him, Dallas fans.

DISAPPOINTMENT: For most of the season the attack just wasn't good enough, as Santiago Mosquera, Dom Badji and Michael Barrios all underperformed in front of net. 18-year-old Jesus Ferreira didn't, with 8g/6a while floating between center forward, attacking midfield and the wing, but everything felt like patching holes until Zdenek Ondrasek burst onto the scene late in the season.

If it hadn't taken so long, Dallas probably would've gotten at least one home game in the playoffs.

PLAYERS TO BUILD ON IN 2019: FW Zdenek Ondrasek, CM Paxton Pomykal, FW Jesus Ferreira, CM Brandon Servania, CM Bryan Acosta, LB Ryan Hollingshead, CB Matt Hedges

This list could keep on going – Dallas are stacked with high-level talent from front to back, and have a culture of playing and developing it. That includes right back Reggie Cannon, who I'm not listing here because I believe the reports that he's likely to be sold this offseason (there is also strong European interest in Pomykal, but I don't believe he'll be moved for at least another year).

If the youngs like Pomykal, Ferreira, Servania and GK Jesse Gonzalez take a step forward, and the olds like Ondrasek, Hollingshead, Hedges and Reto Ziegler keep going their thing... this team's got trophy-winning potential.

OFFSEASON PRIORITY: As of now Dallas are returning 27 players from the 2019 roster, so in a lot of ways they'll be the same team (even if they sell Cannon, it won't be a huge change as his replacement is likely to come from within – either 2019 SuperDraft pick John Nelson or academy product Bryan Reynolds would likely slide into that spot).

But they declined options on two of their most expensive players in Cristian Colman and Edwin Gyasi, so they will have a ton of cap and roster flexibility and the chance to add a high-level DP.

I fully expect them to go after a goal-scoring left winger from Latin America. If their scouting is better than it has been in the past, then Dallas are very much in business.

New York Red Bulls (#12)

Did... did everything go wrong? It feels like everything went wrong. A GIF is worth a thousand words:

They sold their best player and didn't really replace him. Their legendary star striker finally got old, and when they found a replacement, that guy got hurt. Their big offseason signing spent the year in USL League One. A handful of key players were discombobulated all season long after gathering overseas interest. And no lead was ever, ever safe.

RBNY backslid badly.

FORMATION & TACTICS: Chris Armas had his team in a 4-2-3-1 or a 4-3-3 most times out, with occasional forays toward a 4-4-2.

RBNY were still the pressing-est team in the league, and still booted more long-balls and contested as many 50/50s as anyone in MLS, and they were generally very good at winning those 50/50s. Almost every game had a 20-minute stretch where they looked quite a bit like the group that set the (since-eclipsed) points record last season.

But those stretches were pretty much only 20 minutes, and once said stretch was over the Red Bulls were sitting ducks. They coughed up a ton of points from winning positions in the regular season, a trend that continued right on into the postseason.

HIGHLIGHT: The oldest rivalry this team has had is with D.C. United. The best is with NYCFC, and the Red Bulls got the better of their next-door neighbors in controversial fashion this summer:

I swear that RBNY fans took more delight in the misery inflicted upon the Pigeons than they did from their own happiness. A win's just a win, after all. But an NYCFC loss in that fashion? A huge chunk of Red Bulls fans really savored it.

LOWLIGHT: Up 2-0. Up 3-1. The notoriously fickle and frustrated home fans beginning to boo, and a date with hated Atlanta United in their sights. Everything was going pretty well in the first half of RBNY's first playoff game last month.

And then everything fell apart as the Red Bulls utterly collapsed in the second half and extra time. The Union turned those deficits into a 4-3 win, and for the first time ever, a game between these two teams felt like a real rivalry.

The worst thing about it is that, after the season they'd had, the loss was totally predictable.

REVELATION: When Bradley Wright-Phillips stopped scoring in the second half of last year, and then brought that slump with him into the start of the 2019 season, and then got hurt, it seemed like that was going to be the end of RBNY's ability to put the ball into the back of the net. But this team, more than any other in MLS, has developed liminal prospects into serious MLS contributors over the past five years.

And so they did it again. Brian White, the 16th pick in the 2018 SuperDraft, got his first appearance and first goal in mid-April, got his first start later that month, and did not stop producing right up until he got injured in mid-August. White grabbed 9g/2a in 1345 minutes in place of BWP up top, and then when he got hurt, another USL-developed draft pick, Tom Barlow, scored three goals in his 600 minutes.

Neither of them look like future all-stars, but I could see either becoming a consistent 15-goal scorer beginning next season. And both, together, kept this past year from being a complete disaster.

DISAPPOINTMENT: All the blown leads. It was shocking to see what had been one of the best defensive teams in league history – one with minimal turnover on the backline or in goal – turn into what they were.

Losing Tyler Adams obviously hurt, but it shouldn't have hurt that much.

PLAYERS TO BUILD ON IN 2019: FW Brian White, W Daniel Royer, AM Kaku, CM Cristian Casseres, RB Kyle Duncan, CB Tim Parker

It certainly feels like we're about to see an offseason of serious roster turnover in Harrison. BWP is obviously the biggest name, but nobody would be surprised if Luis Robles ended up elsewhere, and nobody would be surprised if there were "ok, we'll take it" offers for Aaron Long and Kemar Lawrence. Michael Murrillo, meanwhile, is probably already gone.

There are a number of other regular contributors from the past five years who'll be back as well. It's not a complete teardown, but it'll be a big, big change.

OFFSEASON PRIORITY: If Long and Lawrence really are going to be sold, then that's job No. 1. If they're not, then job No. 1 is figuring out how to keep them happy and get them to be more productive than they were in 2019 (the same goes for Parker, who did not have a good year).

Job No. 2 is – stop me if you've heard this before – getting a high-end attacking winger who can go out there and just win a game. I'm unconvinced that it's Josh Sims, the English DP who spent the second half of the season in New Jersey on loan and scored a nice goal vs. Philly in the playoffs, but maybe it is? Or maybe it's Homegrown attacker Omir Fernandez?

Whether it's from within or without, this team badly needs another match-winner.

Portland Timbers (#11)

They brought back almost everyone of consequence from last year's MLS Cup finalists, and added a big-money attacker, and it really looked like they knew what they were doing. A gif's worth a thousand words:

For as well as they survived the early road schedule, and for as much talent as they brought back, and for as much talent as they imported, and for as much as some of the younger players on the roster improved... man, did Portland fail to deliver on the back half of their schedule and into the playoffs. They were worse by almost every metric in 2019 than they were in 2018 despite having superior talent.

FORMATION & TACTICS: Throughout the season Gio Savarese tried to get his team to play some version of possession-based soccer, usually out of a 4-2-3-1 or a 4-5-1. He did this while getting weird with positions and roles – Jeremy Ebobisse, a striker, spent probably 65 percent of his time on the wing, while Brian Fernandez, the high-priced goal-scoring import who'd broken out as a winger, spent probably 90 percent of his times as a center forward.

Regardless of who lined up where, this team was way too comfortable settling for bending in a million crosses whenever they faced a packed-in defense, and way too uncomfortable trying to attack out of anything but a low block. They didn't want to be a bunker-and-break team, but that's what they were.

HIGHLIGHT: When Fernandez arrived he took the league by storm, scoring six goals in his first five games including a breathtaking brace in a win at Philly in his first start. Look at this:

That was in the midst of a stretch, from mid-April to mid-August, during which the Timbers went 11-4-3 and looked like they'd be charging up the table, almost to the very top.

LOWLIGHT: Everything over the final two months of the season, to be honest. After scoring six times in his first five games, Fernandez scored in only three of his final 14 appearances and along the way ended up checking himself into the SABH program. Ebobisse never looked comfortable on the wing (despite scoring some big goals), Diego Valeri, Sebastian Blanco and just about the entire central defensive rotation missed time with injuries, and nothing clicked.

From mid-August to mid-September they had eight straight home games and went 2-4-2 with just six goals scored. It got ugly.

REVELATION: Ebobisse, despite being played out of position, scored 12 goals – including most of the team's most important ones throughout the season – and added four assists across all competitions. I'm not quite sure he counts as a "revelation" since he showed he could ball at the end of last season, but I'll admit a good dose of surprise at his productivity from out wide.

The other option here is the late-career resurgence of goalkeeper Steve Clark, who was immense after winning the job in spring.

DISAPPOINTMENT: Why this team never settled into a standard, straight-forward 4-2-3-1 with Valeri playing underneath Ebobisse, Blanco on one wing and Fernandez on the other I will never, ever be able to figure out. On paper that's one of the most explosive and best-balanced attacks in the league.

Savarese's personnel deployment made little sense.

PLAYERS TO BUILD ON IN 2019: FW Jeremy Ebobisse, W Sebastian Blanco, DM Diego Chara, CB Larrys Mabiala, GK Steve Clark

And here's where it gets sticky. Valeri and the Timbers front office have been mired in a prolonged and somewhat public contract dispute over the past few months, and it's not clear that the Argentine legend will return. It's also not clear where he'll play if he does return, and if he returns whether that would be on a DP or TAM deal.

Fernandez's status is in just as much flux. The Timbers have been publicly supportive, but his history of off-the-field issues and volatility are certainly well on their radar. It's not clear whether he'll be back.

Those five guys listed above a pretty solid if mostly long-in-the-tooth core, though. Worth noting, though, that while Chara was once again amazing in 2019, he did fade a bit down the stretch. If Father Time catches up with him in 2020 – and given he turns 34 in April, nobody should be surprised if that happens – it's an immediate crisis for Portland.

OFFSEASON PRIORITY: Sort out Valeri and Fernandez – or their replacements. Sort out who's going to play next to Chara (I think it should be Cristhian Paredes, but the young Paraguayan international was in-and-out of the lineup a bunch for the second straight season). Sort out who's going to play next to Mabiala, and sort out whether right back Jorge Moreira will be returning.

Gavin Wilkinson's got a lot on his plate.

D.C. United (#10)

Surely this would be the year that they took one season's momentum and spun it into a successful follow-up! A GIF's worth a thousand words:

It actually looked for a while like that's almost exactly what would happen. D.C. weren't quite as scintillating at the start of 2019 as they were at the end of 2018, but they nonetheless were scoring goals and winning games through the first two months of the season.

And then they mostly stopped doing both things and were just yuck from mid-May onwards.

FORMATION & TACTICS: It was almost always a 4-2-3-1, and by the middle of the season it was almost always a low block.

They hit a million long balls and almost never combined in the attacking third. Their goal was to ugly up the game through midfield and try to win on a set piece or a mistake, and at times they were pretty good at it. They were afforded that luxury because they had the second-stingiest defense in the league.

HIGHLIGHT: Wayne Rooney with that Steph Curry range:

I was also partial to the Rebekah Vardy Instagram account story.

LOWLIGHT: On Decision Day, with home field advantage in the first round of the playoffs on the line, D.C. played at home against FC Cincinnati – an expansion team who'd conceded 75 goals, the worst by-the-numbers defense in league history.

Just before halftime, Cincinnati picked up a pair of red cards and went down to nine men. That means United had 45 minutes, at home, playing 11-v-9, and just needed a single goal to earn home field advantage in the playoffs.

The game finished scoreless.

REVELATION: Nobody, but here's what I wrote in this segment last year:

Lucho Acosta, until Rooney arrived, was an ultra-talented individualist who produced more footwork-related highlights than goals or assists, and was very quietly being shopped. Lucho Acosta, after Rooney arrived, played MVP-caliber soccer while producing And-1 Mixtape-style highlights just about every single weekend.

Was it a revelation or a mirage, though?

DISAPPOINTMENT: It was a mirage. After an off-season move to PSG fell through, Acosta said all the right things but was a shell of his former self on the field. He managed just 6g/2a in about 2200 minutes this season, and only scored once in the final four months. At no point did he and Rooney exhibit the same sort of chemistry that'd been the cornerstone of the team's second-half 2018 surge, and by the final third of 2019 Lucho was no longer a starter.

Equally disappointing was Chris Durkin's performance after a loan move to Bayer Leverkusen fell through (he ended up with a loan to a small Belgian team instead), and I'll maybe throw in Russell Canouse being shifted from one of the best defensive midfielders in the league to a pretty average right back.

2019 was rough for D.C.

PLAYERS TO BUILD ON IN 2019: FW Ola Kamara, W Yamil Asad, W Paul Arriola, DM Junior Moreno, CB Steve Birnbaum, LB Joseph Mora

They rescued Kamara from an unhappy move to China, and brought Asad back (though that happened after the transfer deadline, so he didn't play in 2019 at all). Those are two proven MLS contributors, as is Arriola, and Moreno took a big step forward in 2019. Birnbaum and Mora were both solid-to-excellent and are in their respective primes.

Where does Canouse fit? Not sure. He's better than Moreno, but is somehow behind both Moreno and Felipe on the DM depth chart. There's no No. 10, and Frederic Brillant's season is probably not replicable, and it's an open question as to whether or not Bill Hamid is going to be back.

OFFSEASON PRIORITY: They need a centerpiece player to replace Rooney. Given the way the rest of their roster is laid out, I think it's pretty obvious that player should be a pure playmaker – a No. 10 who can create chances for Kamara and Asad, and finish off a few himself.

And they probably need to go big with this. The fanbase has shifted back toward grumbling depression after the high of last season's strong finish, and here's the thing: This roster is actually still pretty good! They badly need that centerpiece and they definitely need to give up the hoof-and-run we saw in 2019, but those two things are manageable.

Or they should be, anyway.

Toronto FC (#9)

They spent all season looking wounded. And then... then they definitely weren't. A gif is worth a thousand words:

Toronto FC were far from the juggernauts they were in 2017, but they were also pretty damn far from the roadkill they were in 2018. They reinvented themselves, adding new pieces both expensive and not, after saying goodbye to a pair of legends in Sebastian Giovinco and Victor Vazquez.

And they got back to the playoffs, got past their Eastern Conference rivals, and made their third MLS Cup appearance in four years. It was far from a perfect year, but it was a good indicator that 2018's regular season was an aberration.

FORMATION & TACTICS: Greg Vanney et al said at the start of the year that they wanted to be a 4-3-3 team with wingers – one of the reasons Giovinco was deemed expendable – but thanks to injuries and roster makeovers it took them a while to arrive at that spot.

But they did eventually get there, if not exactly in the way they'd hoped. It turned out that their prized newcomer, Alejandro Pozuelo, didn't have the legs or gas or will to defend all that well in central midfield, so when Jozy Altidore was healthy Pozuelo would play on the wing. When Jozy wasn't healthy, Pozuelo would play up top as a false 9.

It was bizarre, but it worked. Even if it does leave a ton of questions for next year.

HIGHLIGHT: Nick. De. Le. On.

That's how you punch a ticket to MLS Cup.

DeLeon and Richie Laryea were simply massive off the bench during the entire playoff run. Those guys should drink for free all winter long.

LOWLIGHT: There's only one way into the Concacaf Champions League for Canadian MLS clubs, and it's via the Canadian Championship. TFC had owned that particular title in recent seasons, and even though they weren't setting the world afire in 2019, they were still pretty heavy favorites against Montreal in September's final.

And yet.

The Reds outplayed the Impact, but Montreal defended resolutely and were able to take things to penalties. And once it gets to penalties, the Reds are done. They went 1-for-4 and Montreal went into the CCL.

So the list now includes the 2016 MLS Cup, the 2018 CCL final and the 2019 Canadian Championship final. Ooof.

REVELATION: When Laryea was coming out of Akron a few years ago the default comparison was Darlington Nagbe – a super skilled central midfielder who lacked some end product and some bite. Could he win the ball? Could he be a vertical player? Was he skilled enough (like Nagbe) to be an asset even if he didn't do either of those things?

Orlando City never bothered to find out, as they played him all of 503 minutes in his first three years.

He played three times that amount this year for Toronto, proving to be plenty vertical, plenty chippy and having more than enough end product to justify time at right wing, right wingback and right fullback. He scored the winner against D.C. in Toronto's first playoff game, and drew the match-winning PK in their second game against NYCFC.

Lareya's also worked himself into Canada's XI – he was awesome at RB against the USMNT last month.

DISAPPOINTMENT: TFC got Omar Gonzalez mid-season, and he was mostly very good... and then he got hurt right before the playoffs started. And Jozy Altidore battled injuries until late summer, at which point he was fit again... and then he got hurt on Decision Day. Neither guy played a minute in the playoffs until MLS Cup, when Omar went 90 (he struggled with his lateral mobility) and when Jozy went about 30 (he didn't move well, but got himself a goal).

What would've happened if both guys had been fit and ready to go for the full 90? I suspect that with Altidore out there, all that pretty first-half possession the Reds had would've turned into a few more clear-cut looks.

PLAYERS TO BUILD ON IN 2019: FW Jozy Altidore, AM Alejandro Pozuelo, MF Jonathan Osorio, MF Michael Bradley, CB Omar Gonzalez, RB Richie Laryea, GK Quentin Westberg

There is going to be some turnover on this roster, and I suspect that the biggest chunk of it will have to do with Bradley moving off a DP slot and down to a TAM contract, and then the front office doing some fun things from there to boost the high-end talent a bit.

But the bulk of this team is going to be back next year, as it should be. They are solid and smart and deep at almost every spot, and have a half-decade as proven winners now. Why would you make too many changes?

OFFSEASON PRIORITY: The one big change I would expect them to make is their winger rotation. They have some fun young guys and a couple of replacement-level grinders, but they need to go out and get a match-winner there. If Bradley is in fact moved down to TAM and that DP spot does in fact open up, then this is the logical place to spend it.

They also need to think long and hard about how to manage Jozy's minutes during the regular season, as well as whether or not they need another ball-winner in central midfield. But first and foremost... go out there and get a big time winger.