Put the smoked haddock in a pot/pan just big enough to fit it in a singe layer and pour over the water. It should just cover the fish. Set over a medium-low heat and bring to a boil. By the time it starts to bubble, the fish should be cooked through. If it's not, let it simmer another minute. Remove from the heat and take the fish out of the pot and set aside. Don't discard the cooking liquid.
Meanwhile, peel and cut the potatoes into a small dice and finely dice the onions and leek (just the white and pale green parts - discard the base and dark green ends).
Warm the butter in another pot/pan over a medium heat and add the onion and leek. Cook for a couple minutes until they soften but don't let them brown - turn down the heat and/or add a little more butter if needed.
Once the leek and onion have softened and are just translucent, add the diced potatoes and some pepper. Stir so they become coated in butter then cover and let the vegetables sweat a couple minutes.
Add the cooking liquid from the fish to the onion and potatoes, straining it to hold back any foam or skin etc. Cover again and bring to a simmer. Let it cook around 5-10 minutes until the potato is tender. The exact timing depends a little on the potato variety and size of the chunks.
As the soup is cooking, remove any skin and bones from the smoked haddock and break it up into relatively large flaked pieces.
Once the potatoes are cooked, blend part of the soup. You can either remove a couple of spoonfuls of solids and blend the rest in a blender, or if you have an immersion blender, just blend more to one side so some is left un-blended.
Add the flaked haddock and milk to the pot and stir. Taste, and adjust seasoning with a little salt and pepper if needed. Warm it very gently then serve. (You can top with a little fresh chopped parsley if you like.)