Craig Mitchelldyer/Portland Timbers
The Portland Timbers' strange, deflating 2019 season is over.

Saturday night's first round Western Conference playoff match between the Timbers and Real Salt Lake, played in miserable, blustery conditions at Rio Tinto Stadium, was as full of twists and turns as you might have expected it would be — but it was the home side that had the last laugh.

Jefferson Savarino's goal three minutes from time was the difference. Salt Lake will move on to face the Seattle Sounders on Wednesday night, while the Timbers will begin a long and potentially franchise-altering offseason having won just one of their final seven matches.

This team fell apart — and though they nearly rescued themselves in this game, they for months lacked the quality and cohesion necessary to compete with the best teams in the country.

What happens next is anyone's guess. This game, in many ways, was a microcosm of the season: it started and ended extraordinarily poorly, and kept everyone who braved the elements in Sandy on their toes for all 90 minutes.

The first major surprise came an hour before kickoff, when it was announced that Diego Valeri, despite being declared fully fit in the buildup to the game, would not be in the Timbers' starting lineup.

Instead of reinstalling his captain, who entered the evening with a 13 goals and assists in his 17 playoff appearances, Giovani Savarese decided to name the exact same team that defeated San Jose Earthquakes on the final day of the regular season at Providence Park.

What's more, he set that team up in the same formation: a kind hybrid of 4-3-3, with Sebastian Blanco playing as a false nine and Jeremy Ebobisse and Dairon Asprilla pinching in on either side of him.

Almost from the opening whistle, though, it was clear that what worked against San Jose was not going to work against Salt Lake. The Timbers were badly outnumbered in midfield and couldn't keep the ball, Blanco was isolated, and RSL quickly took complete control of the game.

As a result, the first half was one-way traffic — as lopsided as any the Timbers played all the year.

Salt Lake nearly opened the scoring in spectacular fashion after a quarter hour when Kyle Beckerman lofted an excellent ball over the top of the Timbers' defense for Damir Kreilach to run onto, but Steve Clark raced off of his line to cut the ball off, and then chased it towards the corner to complete his clearance.

The problem was that Clark was a long way out of his goal, and his sliding kick had only made it as far as RSL's left back Aaron Herrera — who trapped the ball and then smashed a swerving, mesmerizing half volley towards the vacant goal only for Clark to somehow get back into position and tip the shot over the crossbar.

In a season of spectacular goalmouth acrobatics from the Timbers goalkeeper, who was perhaps the team's best player in the final months of the season, this was another jaw-dropping save.

Clark would be called into action repeatedly over the next ten minutes as RSL continued to bear forward, their front four players moving and interchanging wonderfully and their central midfield duo of Beckerman and Everton Luiz spraying the ball around behind them.

A goal was coming, and, sure enough, just before the half hour mark, it arrived. Corey Baird received the ball on the right wing and sent a cross into the center of the box, where the guileful Damir Kreilach, hero of RSL's playoff run last season, slipped by the Timbers' center backs and planted a free header in to make it 1-0.

Craig Mitchelldyer/Portland Timbers
It was atrocious defending from the Timbers — from Dairon Asprilla's token defense on Baird to Larrys Mabiala and Bill Tuiloma's ball-watching as the cross came over — and the only question was whether Salt Lake would grab another goal or two before halftime to put the game away.

As it happened, RSL would not get the second goal. The Timbers had turned in an almost unthinkably anemic half, getting out-possessed 63 percent to 37 percent and outshot 9-0, but they were, somehow, still alive.

Immediately after the second half began, three things happened. It started snowing, Savarese dropped an extra man into midfield, and Asprilla did just what Asprilla does during the postseason: score goals.

Two minutes after the restart, Blanco sent an out-swinging a corner kick into the penalty area, no one picked Asprilla up, and the Colombian came through like a freight train to head it down and in and level the score at one apiece.

Just like that, the Timbers were alive. The team that got beat to every loose ball in the first half and couldn't connect more than three passes was gone, replaced by a side that suddenly was playing with the kind of swagger we're used to seeing from the Timbers in playoff games.

RSL, meanwhile, looked deeply shaken. Having lost to the Timbers in four straight games and four of their last six home games, the hosts all of the sudden were carrying a great deal of baggage.

Valeri entered the game for a hobbled Ebobisse just after the hour mark, pushing Blanco wide, and, minutes later, Blanco cut inside and nearly put the Timbers ahead with a signature long-range drive — only for Nick Rimando, in his final playoff run, to make spectacular one-handed save to deny him.

Blanco nearly put the Timbers ahead again five minutes later with a bicycle kick off of a cutback header, but his shot hit Nedum Onuoha and trickled just inches wide of the post. Cristhian Paredes had an excellent chance as well, but like RSL in the first half, the Timbers couldn't turn all their pressure into a second goal.

Salt Lake, to their credit, didn't fold — and with around ten minutes to go, after a series of substitutions, they began to regain their foothold as Asprilla struggled to connect the Timbers' attack up top.

The game appeared destined for extra time, until, with three minutes left, RSL struck. Joao Plata ran forward on the right wing and nudged a ball across the top of the box that Tuiloma lunged for but succeeded only in nudging the ball to Savarino, who, with a clean look at goal, beat Clark to the near post.

It was a painful way to loose — unlucky this time for Tuiloma, and for Jorge Villafaña as well, who had also lunged at Plata's pass and left the Venezuelan winger by himself to collect the deflection.

Savarese quickly made his two final changes, one of whom was, bizarrely, center back Claude Dielna, but there would be no more chances. The Timbers were finally, lastingly, out of time to course correct. A season that began in the snow in Colorado ended in the snow a state over with Ismail Elfath's final whistle.

Questions will be asked of Savarese in the coming days and rightfully so. His postgame description of the decision to keep Valeri on the bench as "simple and easy" bordered on condescending, and, in a broader sense, his inability to right the ship over from August onwards become more and more glaring with each passing week.

Savarese has of course already accomplished plenty in his short time in Portland, and there's still little doubt that the Timbers this year enough talent in their team to, when healthy and happy, play with just about anyone.

But the wheels sure did come off. 2019 is in the books — and the road to next season may well be anything but straightforward.

Craig Mitchelldyer/Portland Timbers