Preheat oven to 350 F. Grease a 9x13-inch baking dish.
In a large saucepan, melt butter.
1 cup butter
Whisk in sugar until combined.
2 cups granulated sugar
Add eggs and vanilla; whisk until just incorporated.
4 large eggs, 1 teaspoon vanilla extract
Stir in flour, cocoa powder, and salt until just combined.
1 ½ cups all-purpose flour, ½ cup unsweetened cocoa powder, ¼ teaspoon salt
Pour batter into prepared baking dish.
Bake for 20-30 minutes, or until edges are set and a toothpick inserted in the center comes out with fudgy crumbs.
When the brownies are finished baking, start the frosting.
Beat together butter and cream cheese until well-combined.
2 ounces cream cheese, ¼ cup butter
Add milk, cocoa powder, and powdered sugar. Stir in until well-combined.
¼ cup milk, ½ cup unsweetened cocoa powder, 3 cups powdered sugar
Spread frosting over warm (not hot) brownies.
Notes
Butter: I use salted butter in this recipe.
All-purpose flour: Be sure to properly measure the flour. To properly measure the flour, either weigh it (click on "metric" under the ingredients for the weights), or sift/stir the flour to break it up. Then lightly spoon into the measuring cup. Too much flour will give you dense, cakey brownies.
Cream cheese: I recommend using full-fat cream cheese.
Milk: Any type of milk will work. Heavy cream will also work, but it will give you lighter, fluffier frosting.