In the bowl of a stand mixer* fitted with a dough hook, combine all ingredients except the butter (milk through eggs). Mix on medium speed until combined. Increase speed to medium-high and mix for 2-3 minutes until a rough dough forms. It may look dry, but resist adding additional liquid at this point.
With the mixer running on medium speed, gradually add the softened butter 1 Tablespoon at a time, beating until combined before adding the next Tablespoon of butter. After the first 2-3 adds of butter, the dough will become smoother and wrap itself around the dough hook, slapping the sides of the bowl and pulling the butter into itself. It will take approximately 12-15 minutes to add all of the butter, mixing between each add.
Continue to beat on medium-high speed for about 5-7 minutes, until the dough passes the windowpane test:The dough should be shiny and feel smooth and silky. When you stretch a small piece of dough, it should stretch to the point that light can pass through it without the dough ripping.
Transfer the dough to a clean work surface. Gather the dough from an outside edge, pull up, and fold over into the center. Make your way around the dough in a circle, repeating these stretch and folds, until the dough feels sturdier (about 4-5 folds).
Turn the dough over so the seam side is down on the countertop. Cup your hands around the dough, and gently pull the loaf towards yourself, letting the dough seam drag on the countertop to create surface tension. Rotate the dough and repeat, slowly tightening the surface of the dough. Repeat until you can easily pick up the dough ball (about 5-6 pulls).
Return the dough to the bowl, cover with plastic wrap, and let rise in a warm place until doubled in size, about 2-4 hours (see notes).
Brush a 9x13-inch baking pan with 1 Tablespoon melted butter. Set aside.
Transfer the dough to a clean work surface and divide into 15 equal-sized pieces (I recommend using a kitchen scale to measure your whole dough, then divide that number by 15). For me, each roll was about 67g each. Using one hand for friction, roll each piece of dough into a ball in your palm, creating surface tension with one hand and the seam against your other palm. Set the rolls into your prepared pan, seam-side down. Cover with plastic wrap and let rise for 60-90 minutes until puffed and doubled in size (see notes re: rise time).
Preheat the oven to 375℉.
Whisk together one egg with 1 Tablespoon of water and lightly brush the egg wash on the rolls. Bake for 23-25 minutes until shiny and golden brown. The internal temperature of the rolls should reach 190℉.
Let the rolls cool for a few minutes in the pan, then serve or transfer to a cooling rack to cool fully.
Video
Notes
1 roll = 1 serving. *You do need a stand mixer to make this recipe. I do not recommend trying to make this with a hand-held mixer, or kneading by hand. A note on rise time: This dough likes to be in a very warm area for rising. I highly recommend a dough-proofing mat / box (or a seed-sprouting mat). If you aren't seeing any rise after 45 minutes, it's time to pivot! Move your dough to a warmer location. This could be:
A warmer location in your kitchen / house.
In the oven with the light on (oven is not on / heating).
On top of the stove while the oven is on / warming, or you're doing other stovetop cooking.
This rise could take anywhere from 2-4 hours, depending on your temperature (over several tests, my dough was consistently rising in about 2-2 ½ hours). Dough should not be left to rise for more than 4 hours at room temperature. To make this recipe with active sourdough starter, omit the yeast and replace the sourdough discard with active starter (200g). You will also need to increase the rise times.