Pour the milk into a small saucepan and place over medium-low heat. Heat the milk to 120°F, then remove from the heat and transfer to a stand mixer fitted with a dough hook. Add the yeast and lightly stir. Leave the mixture to sit for 5 minutes.
When the 5 minutes have elapsed, add the sugar, salt, and eggs to the milk/yeast mixture and stir until just combine.
Set the mixer to it's lowest setting and add a cup of the flour. Slowly add the remaining flour ,1/4 cup at a time. Adding more flour only when the dough cleans the sides of the bowl. Once you approach the 2 1/2 cups mark, check how sticky the dough is. The dough should be tacky but not gooey. You may need the extra 1/2 cup of flour, or you may not. I always err on the side of sticky dough, because you can always knead in a little extra flour by hand later on. If your dough is too dry, it's harder to walk it back.
Once the flour is thoroughly integrated, you can start adding the butter. Add the butter a piece or two at a time. Once the butter is no longer visible, add another two pieces. Continue until all the butter is integrated. This can take up to 30 minutes. Be patient.
Transfer the dough to a well-floured surface and knead for another 5 minutes. Form the dough into a ball and set aside. Grease a large mixing bowl with butter and add the dough. Cover the bowl with plastic wrap and let rise in a warm place for 1 1/2 hours - 2 hours or until doubled in size.