Proof the yeast (if using active dry): In a large bowl, mix warm water and sugar.
Sprinkle the yeast on top. Wait 5–10 minutes until foamy. If using instant yeast, skip proofing and add it with the flour later.
Add liquids and salt: Stir in the milk, oil (or melted butter), and salt.
The liquid should be warm, not hot.
Mix in the flour: Add 2 1/2 cups of flour and stir until a shaggy dough forms. Gradually add more flour, a little at a time, until the dough pulls away from the bowl and feels slightly tacky, not sticky.
Knead: Turn the dough onto a lightly floured surface. Knead for 7–9 minutes by hand (or 5–6 minutes in a mixer) until smooth and elastic.
The dough should spring back when gently pressed.
First rise: Place the dough in a lightly oiled bowl, turning it once to coat. Cover with a towel or plastic wrap. Let it rise in a warm spot until doubled, about 60–90 minutes.
Shape the loaf: Gently deflate the dough.
Press it into a rectangle about the length of your loaf pan. Roll it up tightly from the short side, pinch the seam, and tuck in the ends. Place seam-side down in a greased 8.5x4.5-inch or 9x5-inch loaf pan.
Second rise: Cover the pan and let the dough rise until it crowns about 1 inch above the rim, 30–45 minutes.
Preheat the oven to 350°F (175°C) during this time.
Bake: Bake for 28–35 minutes until the top is deep golden and the loaf sounds hollow when tapped. Internal temperature should be around 190–195°F.
Finish and cool: Remove from the pan right away to keep the crust from getting soggy. Brush the top with butter if you like a soft crust.
Cool on a rack for at least 1 hour before slicing.