Prep your ingredients: Peel and chop the potatoes into even 1-inch cubes.
Dice the onion, celery, and carrots. Mince the garlic. Keep everything close by so the process moves smoothly.
Sauté the aromatics: In a large heavy pot or Dutch oven, melt the butter over medium heat.
Add onion, celery, and carrots. Cook for 5–7 minutes, stirring occasionally, until softened and slightly golden.
Add garlic and spices: Stir in the garlic, thyme, and smoked paprika. Cook for 30 seconds, just until fragrant.
Don’t let the garlic brown.
Add potatoes and broth: Add the potato chunks, bay leaf, salt, and pepper. Pour in the broth and stir. The liquid should just cover the potatoes; add a splash of water if needed.
Simmer: Bring to a boil, then reduce heat to a gentle simmer.
Cover partially and cook for 15–20 minutes, or until the potatoes are very tender when pierced with a fork.
Choose your texture: Remove the bay leaf. For a chunky soup, use a potato masher to crush some of the potatoes in the pot. For a creamier soup, blend about half the pot with an immersion blender.
You can also transfer a few ladles to a blender, blend until smooth, then return to the pot.
Stir in dairy: Add the milk or half-and-half and the sour cream or yogurt if using. Warm gently over low heat for 2–3 minutes. Do not boil after adding dairy to avoid curdling.
Taste and adjust: Add more salt and pepper to taste.
If you want a richer profile, stir in a splash of cream or a small knob of butter.
Serve and garnish: Ladle into bowls and top with chives or parsley. Add bacon, cheddar, or a drizzle of olive oil if you like.