Warm the milk to around 95-104°F (35-40°C) and pour it into the bowl of a stand mixer. Sprinkle the yeast and sugar over the milk. If using active dry yeast, leave it to sit for 5-10 minutes until foamy. If using instant yeast, you can move straight on. 240 g milk, 2 ¼ teaspoons instant yeast, 50 g granulated sugar
Add the flour, salt, and eggs to the yeast mixture. Fit the stand mixer with a dough hook and mix on low until a thick, shaggy dough forms. 530 g all-purpose flour, 2 large eggs, 1 teaspoon salt
With the mixer running on medium, add the softened butter a few cubes at a time, waiting for each addition to disappear before adding more. Once all the butter is in, continue mixing on medium for around 10-15 minutes until the dough is smooth, elastic, and pulls cleanly from the sides of the bowl. 85 g butter
Mixing by hand. To mix by hand, stir the ingredients together in a large bowl until a shaggy dough forms, then tip onto a lightly floured surface and knead in the butter a few cubes at a time. Knead for around 10 minutes until smooth and elastic. The dough will be sticky but try resist adding more flour.
Form the dough into a ball and transfer to a lightly greased bowl. Cover with plastic wrap or a damp towel and let rise in a warm spot, around 75-80°F (24-27°C), until doubled in size, about 1 to 1½ hours.
The dough can also be refrigerated after the first rise for up to 16 hours for a slow overnight proof.