In the bowl of a stand mixer, combine the yeast and warm milk. Let it sit until the yeast dissolves, 1-2 minutes.
Add the sugar, salt, and eggs, and continue mixing on medium speed.
Then, slowly add the flour a little at a time, mixing with the paddle attachment. Remove the paddle attachment and attach the dough hook. Continue mixing for 4-6 minutes or until the dough is firm and elastic and doesn’t stick to the bottom of the bowl.
Dump in half the butter and continue mixing until fully incorporated. You may have to stop the mixer and mix by hand to fully incorporate the butter.
Add the remaining butter a little at a time until finished. It's okay if the dough looks loose.
Continue kneading for 4-5 minutes until it's smooth, soft, and shiny. The easiest way to know when the dough is ready is when it slaps against the bowl.
Take the dough out and place it on a lightly floured board. Knead a couple of times, and then put it in a large, greased bowl.
Cover loosely with a clean kitchen towel and let rise in a warm place for 2-3 hours or until doubled. Once the dough has doubled, punch it down.
At this point, the dough may be refrigerated overnight or until ready to use. When ready to use, remove it from the fridge and let it set at room temperature to make it easier to work with (30-60 minutes).
Divide dough according to desired shapes. Beat the egg and water together for the egg wash.