Peel and dice the russet potatoes into small, even-sized cubes so they cook evenly and soften properly. Chop the onion finely to help it melt into the soup while cooking.
Add the diced potatoes, chopped onion, and water or broth to a large pot. Bring everything to a gentle boil, then reduce the heat and let it simmer until the potatoes are very tender and easy to mash.
Using a potato masher, gently mash some of the potatoes directly in the pot. Leave a few chunks whole to give the soup that classic old fashioned texture.
Lower the heat and stir in the butter and milk. Let the butter melt slowly while stirring to keep the soup smooth and creamy without scorching.
Season generously with salt and black pepper. Taste and adjust seasoning as needed, then let the soup simmer for a few more minutes until thick, warm, and comforting.
Remove from heat and let the soup rest briefly before serving. It will naturally thicken as it sits.