Place the flour, sugar, yeast, and salt in the bowl of a stand mixer and mix until combined.
Slice the butter into thin slices (about 1/8 of an inch) and toss in the flour mixture to coat.
Add the milk and using the dough hook, mx together just until a stiff dough forms. Do not overman.
Wrap the dough tightly in plastic wrap and chill for 1 hour.
On a lightly floured surface, roll the dough into a long rectangle shape.
Fold it into thirds (like a letter), turn 90 degrees, and repeat 4 to 6 more times, or until the dough has large streaks of butter in it but it is smooth and flat. (If the butter starts to feel soft during this process, chill it in the refrigerator or freezer until firm.)
Wrap tightly and chill for another hour. Divide the dough in half and roll each portion out to a thickness of about 1/8-inch, in a long rectangle shape (approx. 10-inches wide by 20-inches long).
Cut the dough into long, skinny triangles (about 5-inches at the wide end). You should get about 4 from each half.
Notch the center of the wide end of each triangle with about a 1/2-inch cut, then roll from the wide end to the pointed end, tucking the point into the slit under the croissant.
Place on a parchment-lined baking sheet, cover loosely with plastic wrap, and allow to proof until doubled in size, about 1 to 2 hours. May be slightly less time if you use instant yeast.
While dough is rising, preheat the oven to 375 degrees F.
Gently brush the croissants with egg wash.
Bake for 15 to 20 minutes, or until puffed, golden brown, and flaky.