In the bowl of a stand mixer fitted with a dough hook combine the warm milk, yeast, and granulated sugar. Stir gently, then cover and let sit for about 5 minutes, until the mixture looks foamy.
You can make this dough by hand, without a stand mixer, but it will be a bit of a workout! If making dough by hand, follow the instructions but mix by hand with a sturdy spoon or spatula.
Add the eggs, melted butter, salt, and 1 cup of the flour. Mix on low speed for about 30 seconds, scraping down the sides of the bowl as needed. Add the remaining flour and continue mixing on medium speed until the dough comes together and pulls away from the sides of the bowl, about 2-3 minutes.
Continue kneading in the mixer for 7–9 minutes. If mixing by hand, turn the dough out onto a lightly floured surface and knead by hand for the same amount of time. This often takes longer than you think it should so look for the dough to be soft and slightly tacky, but not overly sticky. If dough is sticky, you can add more flour, just one teaspoon at a time and continue to knead. The dough is ready when it springs back slowly when pressed with a finger. You can also test it by using the window pane test. Grab a small portion of your dough, about the size of a quarter and stretch it into a thin sheet. If you can stretch the dough, hold it up to light to see if light passes through, if the dough tears it is not ready, if the dough does not tear, it is ready!
Lightly grease a large bowl with oil or nonstick spray. Place the dough in the bowl, turning once to coat. Cover and let rise in a warm spot for 1–2 hours, until doubled in size.