Make room for two baking sheets in the refrigerator.
Cut the butter into four 1 tablespoon pieces and place in your electric mixer fitted with the hook attachment. Add flour, sugar, salt, yeast, and cinnamon if using. Mix on low-medium to combine ingredients, about a minute.
Slowly pour in the milk. Once combined, increase speed to medium and beat for 5 minutes. If still too sticky, keep the mixer running until the dough pulls from the sides.
Remove the dough and place on a lightly floured surface (I used a silicone mat). Work the dough and gently flatten it into a medium size disc, cover and chill for 30 minutes.
Roll into a large rectangle and place the dough on the baking sheet. Let it rest in the refrigerator for 4 hours.
For the butter, add the ingredients to your mixer and beat well. Scoop the butter into a smaller rectangle (around 8x10 or 7x10 so it doesn't come out of the edges) on a flat surface, then transfer to the refrigerator to chill for 30 minutes. Do this right before the next step so the butter chills for only 30 minutes.
Place the butter layer in the center of the cold dough. Then fold each edge towards the center, like a trifold brochure. Pinch the edges gently.
Roll and shape into a large rectangle. Then fold the dough into thirds and turn so the short edge is facing you. Roll it out again into the same large rectangle.
The dough is warm by now, so chill it, then fold and roll it 2 more times.
Let the dough rest for 4 additional hours.
Roll and shape the dough into an 8x20 rectangle.
Slice the dough into 8 squares, then cut each in half diagonally.
Gently pull each triangle slightly apart, then roll and place on a baking sheet. Allow to rest at room temperature for about 1 hour, then 1 hour in the refrigerator.
Preheat oven to 400°F. Brush each croissant with the egg wash, bake 10 minutes, and then rotate the entire baking sheet without taking them out of the oven. Bake another 10-12 minutes until the croissants are golden brown and flaky.