Activate the yeast: In a small bowl, combine warm milk, sugar, and yeast. Stir gently and let it sit for 5-10 minutes until frothy.
- Make the dough: In a large bowl, combine flour and salt. Add the yeast mixture and cold water, and stir to form a dough. Knead the dough for 5 minutes until smooth and elastic.
- Chill the dough: Shape into a ball, cover with a towel or plastic wrap, and refrigerate for 1 hour.
- Prepare the butter layers: Pound and roll softened butter into a 7-inch square between parchment paper or plastic wrap. Chill the butter while the dough rests.
- Laminate the dough: Roll the dough into a 12×12-inch square. Place chilled butter square in the center and fold the dough over it. Roll into a 12×24-inch rectangle and fold into thirds. Chill for 30 minutes. Repeat the process 2-3 times for 3-4 turns.
- Shape the croissants: Roll dough into a 12×24-inch rectangle. Cut into triangles and roll each one from the wide end to the tip to form a croissant shape. Tuck the tip underneath.
- Proof the croissants: Place shaped croissants on a baking sheet, cover, and let rise for 1-2 hours until puffed up.
- Bake: Preheat oven to 400°F (200°C). Brush croissants with egg wash. Bake for 15-20 minutes, rotating halfway, until golden and flaky.
- Cool and serve: Let croissants cool on a wire rack for a few minutes before serving. Best enjoyed fresh out of the oven.