Crisp up the bacon: In a large pot over medium heat, cook the bacon until crispy. Remove the bacon with a slotted spoon and drain on a paper towel-lined plate. Leave a few tablespoons of bacon grease in the pot for flavor.
Sauté the veggies: Add the butter to the pot with the bacon grease. Once melted, toss in the onions and cook until softened and translucent (about 5 minutes). Add the garlic and cook for another minute, stirring constantly so it doesn't burn.
Make a roux: Sprinkle the flour over the onions and garlic, and stir to coat. Cook for 2 minutes, making a blonde roux. This will help thicken the soup later.
Broth and potatoes: Slowly whisk in the chicken broth, scraping up any browned bits from the bottom of the pot. Bring to a boil, then reduce heat and simmer for 5 minutes. Add the diced potatoes and simmer for another 15-20 minutes, or until the potatoes are fork-tender.
Creamy time: Pour in the milk and heavy cream (if using). Season with salt, pepper, and ancho chili powder (if using). Bring to a simmer and cook for 2-3 minutes.
Mash it up (optional): If you prefer a chunky soup, leave it as is. For a smoother texture, use a potato masher or immersion blender to partially mash some of the potatoes.
Finishing touches: Remove the soup from the heat and stir in the sour cream. Taste and adjust seasonings as needed.
Serve it up! Ladle the soup into bowls and garnish with the reserved bacon crumbles, shredded cheddar cheese, and a sprinkle of chives. A dollop of extra sour cream is never a bad idea either!