Napoli started with far more confidence than they did against Lazio last week, playing some intricate passing football and forcing Milan onto the back foot. Yet it was the Rossoneri who took the lead after a quarter of an hour when Giacomo Bonaventura netted a superb volley after latching onto Fabio Borini's knock-down.
Though it remained 1-0 until half time, the second half got off to an explosive start when Davide Calabria fired Milan into a 2-0 lead, only for Napoli to pull the score back to 2-2 through a sublime brace from Piotr Zielinski.
Just when it seemed there could be no more drama, substitute Dries Mertens struck 10 minutes from time to send the home fans into raptures.
Key Talking Point
Carlo Ancelotti probably seemed like the perfect appointment when Napoli became resigned to the departure of Maurizio Sarri this summer. A safe pair of hands with a star-studded track record, the 59-year-old combines level-headed management with a pedigree of success, the perfect tonic to the beautiful unpredictability of Sarriball.
Yet two games into the season, Ancelotti's Napoli side look more like a team in flux than one being guided carefully into a new era. Traces of the traits which defined Sarri's reign can still be seen in bursts but the side lacks a clear identity and the loss of intensity under Ancelotti has shone a light on the team's defensive shortcomings.
Napoli have played some fine football in spells of their opening fixtures and with six points on the board from their opening two games, fans won't be complaining too much about their team's performances so far. Nevertheless, it is imperative that Ancelotti figures out what he wants from this Partenopei side of his, and quickly too.
Starting XI: Ospina (5); Rui (6), Koulibaly (5), Albiol (5), Hysaj (6); Hamsik (6), Zielinski (8), Allan (7); Insigne (6), Milik (5), Callejon (6).
Substitutes: Mertens (7), Diawara (7), Luperto (6)
Star Man - Piotr Zielinski
Sometimes when things aren't going too well for your team, it takes one player to step up and come to the rescue. In Napoli's case, that player was Piotr Zielinski.
The midfielder scored not one but two lovely goals to drag his side back from 2-0 down and was one of the few bright sparks in an under-performing Napoli side.
We are yet to see Napoli's attack fire on full cylinders so far this season but with the wealth of talent Ancelotti's side possess in midfield, goals are always a possibility.
Worst Player - Raul Albiol
Really this title belongs to Napoli's defence as a collective but as the most experienced player in the back line, Albiol must hold his hands up at his side's slack defensive displays in their opening two matches.
Is Albiol out there just as an academic exercise or— Hedorah Welty (@dontbeabrick) 25 August 2018
Following on from last week's comical defending to allow Ciro Immobile to score for Lazio, Napoli conceded two goals almost identical to one another against Milan as each time the scorer was given space and time to finish after being set up by a simple cutback. With players such as Albiol and Kalidou Koulibaly at the back, you really expect more from Napoli.
Key Talking Point
With this being Milan's first match of the season, it gave us a chance to take a look at how Gennaro Gattuso's side had improved over the summer and perhaps speculate on whether or not the Rossoneri have what it takes to improve on last season's sixth-place finish.
Tonight's display was a typically bewildering and enigmatic display from Milan that showcased both some vital strengths and some calamitous weaknesses. Recovering from a shaky start to impose themselves on the match, Milan looked confident at 1-0 and appeared to have the game in the bag when Calabria put Gattuso's side two goals to the good.
What followed was a collapse of such epic proportions that Gattuso will be left wondering what on earth went wrong. To lose away at Napoli would be understandable - to do so in this manner feels like a failure and leaves Milan back at square one after such a promising start. There is no doubt that Milan have the players to challenge for Champions League qualifications, but they will have to do better than this going forward.
Starting XI: Donnarumma (7); Rodriguez (5), Romagnoli (6), Musacchio (6), Calabria (6); Bonaventura (7), Biglia (6), Kessie (5); Borini (7), Higuain (6), Suso (6).
Substitutes: Bakayoko (6), Laxalt (5), Cutrone (N/A)
Star Man - Gianluigi Donnarumma
With Milan's strong team performance dissolving into a disorganised mush after Napoli's equaliser, things could have gotten pretty ugly for Gattuso's side and it was only a strong performance by Donnarumma that prevented this from being the case.
The 19-year-old delivered a typically mature performance as he made several smart stops and was constantly looking to play the ball out quickly and spring a counter-attack. Sadly, his teammates were not up to the task.
Worst Player - Ricardo Rodriguez
Rodriguez has been a highly-rated full-back for years and was linked to a host of top clubs prior to joining Milan. Based on this display, one might struggle to understand the hype.
tell me, what is Ricardo Rodriguez doing right now?— M Fachri Darmawan (@MrSimple17) 25 August 2018
The left-back looked vulnerable throughout the match and offered little by way of attacking threat either, delivering a flat performance below his usual levels. Having also picked up a silly booking, it was a night to forget for the Swiss international.
Having secured two victories out of two in a tricky opening couple of games, Napoli face a slightly easier task next weekend with a trip to Sampdoria.
For Milan, things could quickly go from bad to worse as Gattuso's side face a tricky home game against Roma.