Preheat oven to 350°F (175°C). Grease two 9-inch round cake pans with butter or non-stick spray, line bottoms with parchment paper, grease parchment, and dust with cocoa powder.
In a large mixing bowl, sift together flour, sugar, cocoa powder, baking soda, baking powder, and salt. Whisk thoroughly for 30 seconds until well combined.
In a medium bowl, whisk eggs until beaten. Add milk, vegetable oil, and vanilla extract. Whisk vigorously for 1 minute until frothy and well combined.
Pour wet mixture into dry ingredients and whisk until just combined. Scrape down sides with rubber spatula. Do not overmix.
Carefully pour in boiling water and mix gently until fully incorporated. Batter will become thin and pourable. Mix for no more than 30 seconds.
Divide batter evenly between prepared pans. Tap pans on counter 2-3 times to release air bubbles. Bake 30-35 minutes until toothpick comes out with moist crumbs.
Cool cakes in pans for 10 minutes. Run knife around edges, invert onto cooling racks, peel off parchment. Cool completely for 1-2 hours before frosting.
Beat softened butter with electric mixer for 2-3 minutes until pale and fluffy. Sift in powdered sugar and cocoa powder. Add vanilla and salt.
Beat on low until dry ingredients are incorporated. Add heavy cream 2 tablespoons at a time. Increase to medium-high and beat 3-4 minutes until light and fluffy.
Place one cake layer on serving plate. Spread 1 cup frosting evenly across top. Add second layer. Apply thin crumb coat, refrigerate 15-20 minutes, then apply final frosting layer.