In a large pot or dutch oven, add the bacon and cook over medium heat until crispy. Remove the bacon from the pot and set aside, reserve 1-2 tablespoons of the bacon fat in the pot. Add butter, then add the onion. Sauté until translucent, then add the garlic. Sauté for one more minute.
Sprinkle in the flour, and stir constantly for about 2 minutes until the clumps have cooked down. The more you stir, the less grainy the soup will be. While stirring, slowly pour in the broth to combine. Add the diced potatoes then bring the soup to a boil.
Once boiling, reduce the heat and let the soup come to a simmer. Check the potatoes after 15-20 minutes of simmering. Once tender use a masher or immersion blender and pulse the soup a few times to break up the pieces of potato and make the broth creamier.
Lower the heat again, then add the heavy cream and cheddar cheese. Stir this for 5-7 minutes or until the cream and cheese have fully combined. Try your best not to let the soup boil. Add salt and pepper as needed. Remove from heat.
Serve in bowls, and add toppings like sour cream, crumbled bacon, more cheese and green onion. Enjoy!