Cook the Bacon: In a large Dutch oven, fry the bacon until it’s crispy. Transfer the cooked bacon to a plate lined with paper towels to drain. Once cooled, break or cut the bacon into small pieces and set aside.
Prepare the Roux: Heat a large Dutch oven over medium-high heat. Add 10 tablespoons of butter (I also always use some reserved bacon grease) to the pot. Stir in the flour, whisking to combine, and cook for about 2 minutes to remove the raw flour taste, stirring occasionally.
Thicken the Base: Gradually whisk in the milk and heavy cream, stirring constantly until the mixture thickens slightly.
Add Liquid: Slowly whisk in water and bouillon. Simmer, so the bouillon dissolves, stirring well to combine.
Cook the Potatoes: Add the diced potatoes to the liquid mixture and bring it to a gentle simmer. Stir the soup every few minutes to prevent sticking or burning on the bottom of the pot.
Simmer Until Tender: Reduce the heat to low and continue simmering until the potatoes are tender, about 20–25 minutes. (Smaller potato pieces will cook more quickly.)
Add the Creamy Elements: Once the potatoes are tender, stir in the herbs, spices, room-temperature cream cheese (cut into small chunks), sour cream, and shredded cheese. Mix well until the cream cheese has melted completely.
Incorporate Bacon: Stir in the cooked bacon pieces. Taste the soup and adjust the seasoning with extra salt and pepper, if needed.
Serve and Garnish: Ladle the soup into bowls or large mugs and serve warm. Add your favorite toppings, such as extra shredded cheese, green onions, or a dollop of sour cream, for a perfect finishing touch.