Step 1: In a medium bowl, whisk together the granulated sugar, cornstarch, and salt until well combined.
Step 2: In a medium saucepan, heat the milk over medium heat until it’s warm but not boiling. You want it to be steaming, which will help dissolve the dry ingredients more easily.
Step 3: Gradually whisk the warm milk into the dry mixture. This will help prevent lumps from forming. Keep whisking until everything is smooth.
Step 4: Return the saucepan to the heat and cook the mixture over medium heat, stirring constantly. The pudding will begin to thicken as it heats. Once it reaches a gentle boil, continue to stir for about 1-2 minutes until it’s thick and bubbly.
Step 5: Remove the saucepan from the heat and add the chopped semisweet chocolate and vanilla extract. Stir until the chocolate is completely melted and the mixture is smooth.
Step 6: For an ultra-smooth texture, pour the pudding through a fine-mesh strainer into a bowl. This step is optional but highly recommended for that luxurious finish.
Step 7: Divide the pudding into two serving bowls and cover with plastic wrap (make sure it touches the surface of the pudding to prevent a skin from forming). Refrigerate for at least 1-2 hours until chilled. Serve with whipped cream and chocolate shavings if desired.