Prep your ingredients. Dice the ham, potatoes, onion, celery, and carrot.
Mince the garlic. This makes the cooking smooth and quick.
Build the savory base. In a large pot, melt the butter over medium heat. If using bacon, cook it first until crisp, remove to a plate, and use the drippings instead of butter.
Add onion, celery, and carrot. Cook 5–7 minutes until softened and fragrant.
Add garlic and spices. Stir in garlic, thyme, and smoked paprika. Cook 30–60 seconds until the garlic is aromatic.
Don’t let it brown.
Make a quick roux. Sprinkle flour over the vegetables. Stir for 1–2 minutes to coat and cook off the raw taste. The mixture should look a bit pasty.
Whisk in the broth. Slowly pour in the broth while stirring.
Scrape the bottom of the pot to release any browned bits. Add the bay leaf.
Add potatoes and simmer. Stir in the diced potatoes and bring to a gentle simmer. Cook 12–15 minutes, uncovered, until the potatoes are tender when pierced with a fork.
Stir in corn and ham. Add the corn and diced ham.
Simmer another 5–7 minutes so the flavors meld. If using bacon, crumble it and add some now, saving a bit for topping.
Finish creamy. Reduce heat to low. Pour in the milk and cream.
Warm gently for 3–5 minutes, stirring often. Do not boil after adding dairy.
Adjust thickness. For a thicker chowder, mash some potatoes against the side of the pot or blend 1–2 cups and return it. For a thinner soup, add a splash of broth or milk.
Season and serve. Taste and add salt and pepper.
Ham can be salty, so season at the end. Remove the bay leaf. Ladle into bowls and top with green onions or chives—and the reserved bacon if you used it.