Preheat oven to 350 degrees Fahrenheit. Lightly butter three 9-inch cake rounds. Dust with flour or cocoa powder and tap out the excess. Alternatively, you can lightly grease the pans and line with parchment paper.
2
In a large mixing bowl, mix together flour, sugar, cocoa, baking soda, baking powder, and salt in a stand mixer using a low speed until combined.
3
Add eggs, buttermilk, warm water, oil, and vanilla. Beat on a low speed until smooth. This should take just a couple of minutes. Be sure to scrape the sides and bottom of the bowl so that everything gets mixed in.
4
Divide batter evenly amongst the three prepared pans, about 3 cups of batter per pan. Tap the cake pans gently on the counter to allow any bubbles to rise to the top and escape.
5
Bake for 30-35 minutes in a 350 degree oven until a toothpick inserted into the center comes out clean.
6
Cool on wire racks for 15 minutes and then remove the cakes from the pan and place on the wire rack to cool completely.
7
In a large bowl, use a hand mixer or stand mixer to beat together butter and cream cheese until fluffy, about 3 minutes.
8
Add in cocoa powder and vanilla extract. Beat until just combined, about 30 seconds.
9
Beat in powdered sugar, 1 cup at a time. Add milk as necessary to make a spreadable consistency. The frosting should be very thick and will thicken even more once refrigerated.
10
Use frosting to frost and assemble cake, or transfer to a piping bag for decorating. Once frosted, this cake should be refrigerated, but can remain at room temperature for up to 4 hours.