Cut the bacon slices into small pieces using kitchen shears or a sharp knife. Add the bacon to a soup pot and cook over medium-high heat, stirring occasionally, until the bacon is crispy, about 10 minutes. Once cooked, remove the bacon and transfer it to a paper towel-lined plate to drain. Leave about two tablespoons of bacon fat in the pot and discard or reserve the rest for another use.
While the bacon is cooking, chop the onion and dice the potatoes. You may peel the potatoes or simply scrub them clean, depending on your preference.
Add the chopped onion to the pot with the reserved bacon fat. Sauté over medium heat, stirring occasionally, for about 5 minutes until the onion softens. Sprinkle in the flour and cook for about 1 minute, stirring constantly, to remove the raw flour taste.
Gradually whisk the milk into the pot, ensuring the flour dissolves completely to avoid lumps. Add the chicken broth, minced garlic, and diced potatoes. Turn the heat to high and scrape up any browned bits from the bottom of the pot. Once the soup is nearly boiling, reduce the heat to low, cover the pot with the lid slightly open, and let it simmer gently for 20 minutes until the potatoes are fall-apart tender.
Once the potatoes are very tender, use a potato masher to mash them slightly right in the pot, or leave them whole if you prefer a chunkier texture. Stir in the sour cream, most of the grated cheddar cheese, and most of the cooked bacon, reserving some cheese and bacon for topping. Season the soup with salt and black pepper to taste. I like to mash the potatoes just enough to thicken the soup but still keep a few hearty chunks for texture.
Ladle the soup into bowls. Top each serving with the reserved crispy bacon, extra grated cheddar cheese, and chopped green onions (scallions). Serve hot and enjoy!