In a large pot, cover the diced potatoes with water, bring to a boil, and cook until tender, about 15 minutes. Drain and set aside.
In the same pot, melt the butter over medium heat. Add the diced onion and minced garlic, and sauté until the onions are translucent, about 5 minutes.
Stir the flour into the onion mixture, and cook for 2 minutes to remove the raw flour taste, stirring constantly.
Gradually add the chicken broth and milk to the pot, stirring continuously. Add the cooked potatoes back into the pot. Season with salt and pepper. Bring to a simmer and cook for 10 minutes, allowing the flavors to meld.
Reduce heat to low and stir in the heavy cream. Heat through without boiling, about 5 minutes.
If thick, add a splash more of the broth to thin it out. Use an immersion blender to blend the soup until it is creamy with some chunks of potato left.
Adjust seasoning with salt and pepper. Serve warm with shredded cheese, fresh chives, and optional bacon crumbles on top.