In a large mixing bowl, with a stand or handheld mixer fitted with a dough hook stir together flour, sugar, yeast, milk, soft butter, and salt. Watch out, that the yeast and the salt don't get in touch. Stir on low speed until it starts to come together. Slowly add water while mixing the dough. Knead on medium-low speed for 10 minutes. Shape the dough into a 9.85x6.7 inches (25x17cm) rectangle. Wrap tightly with plastic foil and refrigerate overnight 8-12 hours.
Place the cold butter between 2 pieces of parchment or waxed paper. With a rolling pin pound butter into a 7.1x7.1 inches (18x18cm) rectangle. Straighten the sides with the outer edges of your hands by pushing towards the center. Roll evenly thick. Cover with plastic wrap and freeze butter and the croissant dough for 20 minutes.
Remove dough from the freezer and roll on a very lightly floured surface with a very lightly floured rolling pin into a 15x7.9 inches (38x20 cm) rectangle, 0.3 inches (7-8mm) thick. Place butter slab on one half of the croissant dough that there is about 0.4 inches space around three edges and fold the other dough-half over the butter. Completely seal the butter inside the dough by pressing the edges together. Make sure that there are no air bubbles between the layers. Rotate 90°.
Just use as much flour as needed that the dough doesn't stick. Firmly but carefully press the dough with the rolling pin starting on both sealed ends. Then stop pressing and begin rolling the dough. Be careful and don't work the dough over that the butter doesn't incorporate with the dough. Roll the croissant dough just in one direction into a 15x7.9 inches (38x20 cm) rectangle, 0.3 inches (7-8mm) thick. Rotate the dough 180° while rolling to keep it even, if needed. Make sure that you lengthen the dough instead of widening it and keep the edges as straight as possible. Shape the corners with your hands to a square.
Remove all excess flour from the dough before folding it, if there is any. Take one short side and fold one-third of the dough over itself that about ⅔ of the dough is covered by itself. Then take the other short side and flap it over itself that it touches the edge of the previously folded part. The croissant dough has now ⅓ of its original size. Then fold it in half. You should have a rectangle with 4 layers of dough. Be sure that you remove all excess flour between each layer. Cover with plastic foil tightly and freeze for 30 minutes.
Roll the dough in the direction of the two open ends with the fold to your right until it is a 15x7.9 inches (38x20 cm) rectangle, 0.3 inches (7-8mm) thick. Be careful, not to overwork the dough and take as little flour as possible. Keep the edges as straight as possible. Rotate 180° while rolling to stay even, if needed. Pick up one short end and fold one-third of the dough on itself. Pick up the other short end and fold on top that it covers itself (letter style). You should have a 3-layered dough. Cover with plastic foil tightly and freeze for 30 minutes.
Turn the dough again by 90° from the previous position, and roll into a 26x10.6 inches (66x27cm) rectangle, 0.12-0.15 inches (3-4mm) thick. And again, take as little flour as possible, keep the edges as straight as possible, and don't overwork the dough. Shape the corners with your hands to a square.
With a sharp knife or pizza cutter, cut off 0.4 inches all around the rectangle to reveal the multilayered puff pastry. The croissant dough should be 25.2x9.85 inches (64x25cm) in size. Transform it into a parallelogram by picking up 2 corners of the dough opposite the diagonal and stretch gently. Use a tape measure or yardstick and measure both long sides of the dough (should be still 25.2 inches / 64cm) and divide each side through 7-8. This makes sure that your croissants are all the same size. Depending on your parallelogram and the precision of your cut, you get 14 or 16 croissants. Then cut triangles with the tape measure. The cut croissants should be between 3.15-3.55 inches (8-9cm) wide and 9.85 inches (25cm) long. Cover with plastic foil and freeze for 15 minutes.
Line 3 baking sheets with parchment paper. Set aside.
Remove croissants from the freezer and cut with a knife 0.2-inch (5mm) slits in the middle of the short sides. Place croissants with the notched side towards you. Roll the dough up and away from you, moving your hands outward from the center. Lightly press the tip to close the croissants. Place croissants on prepared baking sheets (a maximum of 6 croissants per baking sheet) with enough space between each croissant. They will triple in size. Place the dough tip underneath that they don't unroll during baking.
Combine egg and egg yolk in a small bowl and lightly brush croissants. Your oven should have a temperature of 80-85°F (26-29°C). Maybe you need to open the door for 1-2 minutes if it is warmer than that.
Pour boiling water in a heat-proof bowl. Arrange all baking sheets in the oven and the boiling water on the bottom of the oven. Close the door and let the croissants rise for 2.5 hours. This trick can simulate a professional oven. It lets the croissants rise high and prevents them from drying out.
Remove croissants from the oven and preheat to 375°F (190°C). Carefully brush croissants a second time with eggs. Bake one sheet at the time for about 16-20 minutes until they have a brown and even color. Let cool on the baking sheets for 5 minutes then transfer to a wire rack to cool completely. Even if the croissants are best eaten fresh on the same day, you can store them in an airtight container at room temperature up to 3 days. Dip or drizzle with chocolate, dust with powdered sugar, or fill to your taste, if desired.