Preheat oven to 350 degrees.
Place the potatoes in a large pot and cover with water. Bring to a boil over high heat, then reduce to medium high and continue to boil until potatoes are soft (about 10 minutes).
While the potatoes are boiling, heat the butter over medium high heat in a large skillet or dutch oven. Add the chopped onion, garlic, celery, carrots, ground beef, salt, and pepper, stirring often until vegetables are soft and meat is browned.
Reduce heat to medium and sprinkle flour evenly over the surface of the cooked vegetable-meat mixture and stir to mix. Continue to heat a few more minutes until the mixture starts to thicken slightly. Transfer to a medium casserole dish and set aside. (Mine is 11x8", which makes a nice, thick pie. But 13x9" is fine too)
Drain the cooked potatoes, add the butter and salt, and use a potato masher or electric mixer to mash. If you're using an electric mixer, start on low speed and progress to medium - don't overmix them or they'll become gummy! Add milk/cream to the potatoes if needed.
Spoon mashed potatoes on top of the meat-vegetable mixture in the casserole dish and use a spatula to spread evenly across the surface.
Bake for 20 minutes, or the mixture is heated through and the surface begins to firm slightly.
I usually add a minute or two under the broiler at the end to get that golden brown crisp on the surface!