Make the Tangzhong: In a small saucepan, whisk together 20g of bread flour and 100ml of water (or milk) until no lumps remain.
Place over low-medium heat. Cook, stirring constantly, for about 3-4 minutes until the mixture thickens into a paste that resembles glue or mashed potatoes (lines left by the spoon don't fill back in).
Transfer to a small bowl, cover with plastic wrap touching the surface, and let cool to room temperature.
Mix the Dough: In the bowl of a stand mixer, combine dry ingredients: bread flour, sugar, instant yeast, and salt (keep salt away from yeast). If using milk powder, add it here.
In a separate jug, whisk the warm milk, heavy cream, and egg. Add this liquid mixture and the cooled Tangzhong to the dry ingredients.
Knead: Mix on low speed until a shaggy dough forms. Increase to medium-low and knead for 5-7 minutes. The dough will be sticky.
Add the softened butter one tablespoon at a time, waiting for each to incorporate. Once all butter is in, turn mixer to medium-high and knead for 8-10 minutes until the dough passes the Windowpane Test (stretches thin without tearing).
First Rise: Shape dough into a smooth ball. Place in a greased bowl, cover, and let rise in a warm spot (25°C-28°C) for 60-90 minutes, or until doubled in size.
Shape: Punch down gently. Divide into 3 equal pieces. Roll into rounds, cover, and rest for 15 minutes.
Roll each ball into a long oval. Fold sides into the center (letter fold), flatten gently, then roll up into a tight spiral. Place spirals into a greased loaf pan.
Final Proof: Cover and let rise for 45-60 minutes. The dough should rise to about 1 inch below the rim (for Pullman) or cresting the top (for open loaf).
Bake: Preheat oven to 350°F (175°C). Brush the top gently with egg wash. Bake for 30-35 minutes. Tent with foil if browning too fast. Internal temp should reach 190°F (88°C).
Remove from pan immediately and cool completely on a wire rack for at least 1 hour before slicing.