Place washed, peeled, and cubed potatoes into a large pot and add the chicken broth. Cover.
Bring to a boil, reduce heat and simmer until potatoes are fork tender.
In a separate pot, or pan, melt butter. Add onions and saute until soft.
Add garlic, and saute 1-2 minutes.
Add flour to the pan and whisk together with the onions and garlic. Let the mixture cook about 1 minute.
Slowly add the milk, a 1/2 cup at a time, whisking constantly. The only lumps you should see should be the onions.
Continue adding milk and whisking constantly until all the milk has been evenly incorporated.
Bring the roux to a simmer and let it heat until thickened, about 5 minutes, whisking often.
Add the thickened roux to the potatoes and chicken broth in the large pot.
Using a potato masher, mash potatoes in the pot until there’s minimal chunks.
Turn the heat to low, and add the chicken and ham.
Add salt and pepper to soup to taste.
When heated through, add the Swiss and stir until melted and evenly incorporated.
Serve topped with a little extra shredded Swiss & freshly cracked black pepper.