Preheat oven to 350 degrees. Line a two standard size muffin tins with 18 cupcake liners, set aside.
In a medium size mixing bowl, whisk together the flour, baking powder, and salt, set aside.
In a large mixing bowl (with a hand mixer) or in the bowl of a stand mixer, cream the butter until light and fluffy, about 3 minutes. Add the vanilla extract and sugar, beat until combined, about 1 minute. With mixing speed on low, add one egg at a time, mixing just until combined.
With mixing speed on low, alternate adding the dry ingredients and the buttermilk (or whole milk) and sour cream, mixing just until combined. NOTE: I like whisking my buttermilk and sour cream together so I can add it as one. The batter will be fairly thick, that's exactly what you want.
Scoop the batter into the prepared pans, filling each liner ½ - ⅔ of the way full. Place in the oven and bake for 18-20 minutes or until the tops of the cupcakes spring back when touched and a cake tester inserted in the center comes out clean. Remove from the oven and allow the cupcakes to cool in the pans for 3-5 minutes before transferring to a wire rack to cool completely.
Meanwhile, to prepare the frosting, in a large mixing bowl or the bowl of a stand mixer, beat the butter until smooth and creamy, about 3 minutes. Turn mixing speed off, add the salt and the vanilla extract. Turn mixing speed on to low, then gradually add the powdered sugar and cocoa. Beat for 2 minutes, then turn to low and add the whole milk. Turn the speed up and beat for 2 minutes or until light and fluffy. Spread or pipe on to the cooled cupcakes, garnish with sprinkles if desired.
Notes
*Grating the butter will help it come to room temperature more quickly. Let it sit at room temperature for 15 minutes before creaming it.