In a medium saucepot, pour in sugar, flour, and salt. Whisk to combine.
Gradually pour the milk into the flour/sugar mix, whisking well as you do to prevent clumps, until fully incorporated and smooth.
Place your pot over a stove burner set to medium-low heat. Cook the milk mixture, whisking constantly, until the flour and sugar are fully dissolved, the mixture boils and it thickens enough to coat the back of a spoon. It should be about the consistency of pudding, but it will firm up more as it cools. This should take about 8 to 10 minutes.
Pour your cooked milk base into a medium sized bowl. Cover with plastic wrap pressed against the surface of the milk base to prevent a skin. Set aside to cool completely to room temperature before using.
In a large bowl, cream butter until lightened in color and fluffy. This takes about 2 to 3 minutes on medium speed with an electric mixer fitted with the beater attachment.
Gradually add the cooled milk base to the creamed butter. Add about 2 tablespoons of milk base to the butter at a time, beat well to incorporate before adding in another addition. Repeat until all of the milk base is incorporated into the butter.
Add your vanilla to the frosting, and beat until fully combined and you're left with a light and fluffy mixture. It should be pale in color and about double the volume of the butter. Frost away!