In a large heavy-bottomed Dutch oven, melt the butter over medium heat until foaming.
Add the diced onion, carrots, and celery. Sauté for 7-9 minutes, stirring occasionally, until the vegetables are translucent and softened.
Stir in the minced garlic and cook for 60 seconds until fragrant.
Sprinkle the flour over the vegetables and whisk constantly for 2 minutes to cook out the raw starch flavor, forming a light blonde roux.
Gradually pour in the broth while whisking vigorously to ensure a smooth, lump-free base.
Add the cubed potatoes, salt, black pepper, smoked paprika, and dried thyme. Increase heat to bring the mixture to a gentle boil.
Reduce the heat to medium-low, cover partially, and simmer for 15-20 minutes or until the potatoes are fork-tender.
Optional: Use a potato masher to crush approximately 1/3 of the potatoes directly in the pot to achieve a thicker, creamier consistency.
Stir in the whole milk and heavy cream. Allow the soup to heat through for 3-5 minutes, ensuring it does not reach a rolling boil to prevent curdling.
Remove the pot from the heat source. Add the shredded cheddar cheese in three batches, stirring until completely melted and incorporated into the base.
Garnish with fresh parsley and serve immediately.