Prep the vegetables and ham. Dice the onion, carrots, celery, and potatoes.
Cut the ham into small cubes. Mince the garlic. Keep everything ready to go.
Sauté the aromatics. In a large pot or Dutch oven, heat the butter and olive oil over medium heat.
Add onion, carrots, and celery with a pinch of salt. Cook 5–6 minutes, stirring, until the onions turn translucent and the carrots start to soften.
Add garlic and spices. Stir in the garlic, thyme, and smoked paprika. Cook 30 seconds, just until fragrant.
Don’t let the garlic brown.
Build the base. Sprinkle the flour over the vegetables and stir to coat. Cook 1 minute to remove the raw flour taste. This will help thicken the chowder.
Add broth and potatoes. Pour in the chicken broth while stirring to avoid lumps.
Add the bay leaf, potatoes, and a pinch of pepper. Bring to a gentle boil, then reduce heat to a lively simmer.
Simmer until tender. Cook 12–15 minutes, stirring occasionally, until the potatoes are fork-tender but not falling apart.
Add ham and dairy. Stir in the diced ham, milk, and cream. Lower the heat to medium-low.
Simmer another 5–7 minutes to warm the ham and let the flavors meld. Do not boil after adding dairy.
Thicken to your liking. For a creamier texture, use a potato masher to lightly mash some of the potatoes in the pot, or remove 1 cup of chowder, blend until smooth, and stir it back in.
Season and finish. Remove the bay leaf. Taste and add salt as needed (ham can be salty, so season at the end).
Add more pepper to taste.
Serve. Ladle into bowls and top with green onions, parsley, and cheese if you like. Serve with crusty bread, oyster crackers, or a simple side salad.