The dough. Dissolve the yeast in the milk. Combine 7 cups of the flour with the granulated sugar in a mixer. You can also do that by hand. Add the yeast and milk mixture and mix lightly. Add the salt.
Now start adding the eggs, one at a time, while mixing on low speed until the mixture starts to come together. Scrape the sides, increase the speed to medium, and continue mixing for about 10 minutes. You should get a smooth and elastic dough.
Start adding the butter, little by little, increase the speed to medium-high and mix for about 8 minutes, until the dough is smooth. If the dough is too sticky, add the remaining ¼ cups of flour.
Place the dough inside a lightly oiled bowl. Cover with a plastic wrap or damp towel and leave in a warm place to rise, for about an hour. It should double in size. Meanwhile, prepare the topping.
The topping. Combine the flour, baking powder, salt, confectioner's sugar, and cocoa powder (if using it) in a bowl. Cream the butter in another bowl and add the flour mixture to it. Mix well until combined. Add the vanilla extract and mix once again.
Making the buns. Divide the dough into 16 pieces and roll tightly by cupping your hands and pressing as you roll it over the table. Line a baking sheet with a parchment paper and place the dough balls on it. Leave about 1 inch space between them. Press every ball with the palm of your hand so it looks like a dome.
Roll a gumball-size amount of topping in your hands, flatten it using a rolling pin, and use a glass to cut the dough into perfect circles. The circle should be big enough to cover the dome of dough. Score with the tip of a knife or a pizza cutter to make parallel curved lines to resemble a seashell. Leave at room temperature, until the dough doubles in size, for about 40 minutes.
Preheat the oven to 350°F (175°C). Bake the buns for 30-40 minutes. Enjoy!