Activate the yeast: Warm the milk until comfortably warm, not hot. Stir in the sugar and yeast and let it sit for 5-10 minutes, until lightly foamy.
Make the dough: Add the egg, melted butter, and salt. Gradually mix in the flour until a soft, slightly sticky dough forms. Knead on a lightly floured surface for 7-10 minutes, until smooth and elastic.
First rise: Place the dough in a lightly greased bowl, cover, and let it rise in a warm place for 1-1½ hours, or until doubled in size.
Prepare the filling: Mix the softened butter, brown sugar, cinnamon, vanilla, and salt until smooth and spreadable.
Roll out the dough: Gently deflate the risen dough and roll it into an approximately 14 * 18-inch rectangle. Spread the cinnamon filling evenly over the surface, leaving a small border around the edges.
Roll and cut: Starting from the long side, roll the dough into a log. Cut it into 10-12 equal pieces using a sharp knife or unflavored dental floss.
Second rise: Arrange the rolls in a greased 9 × 13-inch baking dish. Cover and let them rise for 30-45 minutes, until noticeably puffy.
Bake: Preheat the oven to 350°F (175°C). Bake for 22-28 minutes, until lightly golden on top and soft in the center.
Make the icing: Beat the cream cheese and butter until smooth. Add the powdered sugar and vanilla, then mix until creamy. Add milk gradually if needed to reach your preferred consistency.
Finish and serve: Let the cinnamon rolls cool for about 10 minutes, then spread the cream cheese icing over the warm rolls. Serve immediately for the softest, gooeyest texture.