Cook the diced bacon in a large Dutch oven until crispy. Remove with a slotted spoon and set aside, leaving about 2 tablespoons of bacon fat in the pot.
Add butter to the bacon fat and sauté the diced onion until translucent, about 5 minutes. Add minced garlic and cook for another minute.
Sprinkle flour over the onion mixture and cook for 2-3 minutes, stirring constantly to create a roux.
Gradually add chicken broth while whisking continuously to prevent lumps from forming.
Add the cubed potatoes and bring to a boil. Reduce heat, cover, and simmer for 15-20 minutes until potatoes are tender.
Using a potato masher or immersion blender, partially mash some of the potatoes while leaving some chunks for texture.
Stir in heavy cream and bring back to a gentle simmer.
Add sour cream and cheddar cheese, stirring until cheese is melted and soup is creamy.
Season with salt and pepper to taste.