Boil the potatoes: Add chopped potatoes to a pot of cold, salted water. Bring to a boil and cook until very tender, about 12–15 minutes.
Drain well.
Mash the topping: Return potatoes to the pot. Add butter, milk, salt, and pepper. Mash until smooth and spreadable.
Stir in cheese if using. Adjust milk to reach a creamy consistency that’s easy to spread.
Brown the meat: Heat a large skillet over medium-high heat. Add ground lamb or beef.
Cook, breaking it up, until browned and no longer pink. Drain excess fat if needed and season lightly with salt and pepper.
Sauté the vegetables: If the pan is dry, add olive oil. Add onion, carrot, and celery.
Cook 5–7 minutes until softened. Stir in garlic and cook 30 seconds until fragrant.
Build the sauce: Add tomato paste, Worcestershire, thyme, rosemary, and paprika. Stir for 1 minute.
Sprinkle flour over the mixture and cook 1 minute to remove the raw taste.
Simmer: Pour in broth and stir, scraping up browned bits. Add peas. Reduce heat and simmer 3–5 minutes until thickened and glossy.
Taste and adjust seasoning.
Assemble: Lightly grease a 9x13-inch baking dish. Spread the meat and vegetable filling in an even layer. Dollop mashed potatoes on top and spread to the edges to seal.
Use a fork to create ridges for browning.
Bake: Bake at 400°F (200°C) for 20–25 minutes until the top is lightly golden and the filling bubbles around the edges. Broil 2–3 minutes if you want deeper color.
Rest and portion: Let it rest 10–15 minutes so it sets. Slice into 6–8 portions.
Transfer to meal prep containers and garnish with parsley if you like.
Cool before storing: Let containers vent and cool to room temperature (no more than 1–1.5 hours) before refrigerating or freezing.