Cook the potatoes in a separate pot of water as you would mashed potatoes. Boil over high heat until soft and breaking apart, about 30 minutes. Ladle out 2 cups of the starchy water before draining.
To clean leeks, slice off the dark green top and root end. Cut the leeks in half lengthwise and slice into half moons. Put the chopped leeks into a bowl of water, agitating them with your fingers to allow any dirt to fall to the bottom. Pull the clean leeks from the top with your hands. You can give them another good rinse in a colander.
Heat a large soup pot or Dutch oven over medium heat and melt the butter. Add the leeks and saute until soft, about 8 minutes. Pre-measure your salt and pepper, adding a pinch to the leeks.
Add the ham to saute along with the leeks, about 5 more minutes until slightly brown and crispy.
Add the garlic and flour and stir in another minute until fragrant.
Add the milk and 2 cups of starchy water from the boiling potatoes. Use a ladle or measuring cup to pull it out and measure, even if the potatoes aren't done.
Simmer the soup over medium low heat, whisking often until the liquid thickens, 7 or 8 minutes. Add the drained potatoes when done, sprinkle with the remaining salt and pepper as you add them. Stir the soup together, continue simmering to thicken it more. You can choose to mash the potatoes further with a potato masher.
Stir in the cheese, save some to garnish the top, and serve with a dollop of sour cream or plain yogurt and fresh scallions or chives.