Heat a large soup pot or Dutch oven over medium heat. Add 2 tablespoons of butter, carrots, onions, celery, and garlic. Cook for 4 to 5 minutes or until the vegetables begin to soften.
1 ½ cups carrots, 1 cup white onion, ½ cup celery, 1 large garlic clove
Add the chicken broth, potatoes, and thyme (if using). Bring the ingredients to a boil then reduce to a simmer.
6 to 7 cups low-sodium chicken broth, 4 cups russet potatoes, ½ teaspoon dried thyme
Cover and simmer for 15 to 20 minutes. You want to be able to pierce the potatoes with a fork, but they should still be firm.
Add the broccoli florets, and cook for 5 to 6 minutes or until the potatoes are tender but not overly soft.
3 cups fresh broccoli florets
Meanwhile, make a roux by melting the remaining 4 tablespoons of butter in a medium saucepan. Whisk in the flour and cook for 2 to 3 minutes to remove the raw flour flavor. Continue whisking and slowly pour in the milk until the mixture is smooth and no lumps remain.
⅓ cup all-purpose flour, 2 cups whole milk
Pour the milk mixture into the soup, and stir constantly until the soup thickens. Add the heavy cream and stir to combine.
1 cup heavy cream
Add the shredded cheese a little bit at a time, stirring between each addition. Once all the cheese melts, remove from heat. Taste, and add salt and pepper to your liking.
Ground black pepper, 2 cups shredded cheddar cheese, Salt
Enjoy warm with crumbled bacon on top! See post for tips and storage options.