During the first half of their 4-2 win over Juventus, Bayern Munich were horrendous. They couldn't defend and their attack was stymied by a staunch Juventus defense. Guardiola's initial tactical plan was eviscerated by Max Allegri's deployment of Alvaro Morata. But where they failed in the first half their performance in the second half came down to Pep Guardiola's impact substitutions early in the second half.
For much of the first half, Bayern Munich's attempts to break down the Juventus defense relied on their fullbacks. David Alaba and Philipp Lahm's incisive inside runs were designed to pull apart the Juventus midfield but it left them exposed on defense. To Allegri's credit, he used the pace of Alvaro Morata and Juan Cuadrado to attack into those exposed spaces dragging Medhi Benatia and Joshua Kimmich around at whim. In the case of Benatia who has shown to be poor at defending at pace it was a massacre. Overall it was highly effective and Juventus' early two goal lead was thoroughly deserved.
Pep Guardiola got all of his substitutions right
Bringing in Juan Bernat for the abysmal Benatia was where Guardiola showed his willingness to fix his initial mistake. Moving Alaba into the centerback role gave Bayern more speed and agility in the middle and sacrificed nothing. This allowed Bayern to respond to the forays of Morata with pace ensuring that counters typically ended before Juventus could bring the rest of their team in support. While the Spaniard was goal dangerous on several occasions, it was on impressive individual efforts where secondary runs were of little concern. That was a far cry from the potency of Juventus' attacks in the first half.
Dropping in Kingsley Coman for Xabi Alonso in the 59th minute though was where the game dynamic suddenly altered. With five attackers suddenly bearing down on their defense, Juventus had to shift into a more defensive stance. Arturo Vidal was supported by attacking forays from any player in the Bayern Munich defensive line creating massive numerical superiority in the middle and on the wings. Cuadrado and Alex Sandro had to withdraw into the midfield to just give their teammates a chance at defense leaving Morata isolated by himself as the lone outlet to relieve pressure.
To Bayern's credit, they won almost every clearance sent Morata's way causing Allegri to go to Mario Mandzukic's aerial ability. But without Morata's runs in behind a danger any longer, Bayern were free to launch both fullbacks forward without worry doubling down on their attacks while Arturo Vidal dropped a little deeper and occupied the middle. From there he could pick up second balls, win tackles, and restrict Mandzukic's aerial effectiveness. The result is history.
In all fairness to Guardiola, his initial lineup was a mistake. Morata's pace is a known threat and Bayern's weakness on the counter is always an omnipresent issue. He was the only healthy striker for Juventus and he was guaranteed to start. And Bayern knew this 48 hours prior to the match.
Had Juventus started Mandzukic, Guardiola's initial lineup would have made perfect sense. Why he fielded Benatia and Alonso only makes sense when viewed as a desire not to alter a gameplan that had been constructed before the injuries to Paulo Dybala and Mandzukic happened. Your take on whether or not that's good coaching or his fault is subjective and unique to your view of the game.
However, he deserves credit for his willingness to go to his bench very early and fix the exact issues that plagued Bayern yesterday. While he's correct in saying that the win yesterday was not tactical, but one of the heart, that's also underselling that he recognized his mistake early and gave this team the change, and most importantly the time, they needed to win.