Dissolve yeast in warm water with a teaspoon of sugar. Let it sit until frothy, about 5 minutes.
In a large bowl, mix 2 cups of flour, the remaining sugar, the salt, and cinnamon.
Add in the yeast mixture, warm milk, melted butter, and egg. Stir until just combined.
Gradually add the remaining flour, mixing until a soft dough forms.
Transfer dough to a lightly floured surface and knead until smooth and elastic, about 8 minutes.
Place dough in a greased bowl, cover, and let rise in a warm place until doubled in size, about 1.5 hours.
For the topping, beat softened butter with powdered sugar until creamy. Mix in flour and vanilla extract until a dough forms. Divide in half if making chocolate topping and blend cocoa powder into one half.
Preheat oven to 350°F.
Punch down the risen dough and divide into 12 equal pieces. Shape each into a ball and place on a baking sheet lined with parchment paper.
Divide topping into 12 portions. Flatten each into a disk and place on top of dough balls, molding it to cover the top.
Use a knife to score the topping with a shell pattern.
Let the dough rest for 30 minutes, then bake for 18-20 minutes or until lightly golden.
Remove from oven and let cool on a wire rack before serving.