Make a roux: Sprinkle flour over the onions and stir constantly for about 1 minute.
Add stock and potatoes: Gradually whisk in the stock, add potatoes, and bring to a simmer.
Simmer until tender: Cook the potatoes for 12-15 minutes until fork tender, stirring occasionally.
Mash some potatoes: Use a potato masher to mash part of the potatoes in the pot, leaving some chunks.
Stir in milk and cheese: Lower heat, add milk, cheddar, and sour cream. Stir until cheese melts.
Season to taste: Add salt, pepper, and optional ingredients.
Finish and serve: Serve hot topped with bacon, green onions, and extra cheese.
Notes
Feel free to customize the recipe by omitting bacon or using dairy-free alternatives. This soup can be prepared ahead of time and also freezes well without sour cream.