Preheat the oven: Heat to 400°F (200°C). Lightly butter a medium casserole dish (about 8x11 inches or similar).
Make the mash: Peel and cut potatoes into chunks.
Cover with cold salted water, bring to a boil, then simmer until very tender, 15–18 minutes.
Drain and mash: Drain well, then return potatoes to the hot pot for 1 minute to steam off excess moisture. Mash with butter and warm milk until smooth. Stir in cheddar if using.
Season well.
Sauté the veg: While potatoes cook, warm oil in a large skillet over medium heat. Add onion, carrots, and celery. Cook 6–8 minutes until soft and lightly golden.
Add garlic and cook 1 minute.
Brown the beef: Turn heat to medium-high. Add minced beef and cook, breaking it up, until browned with no pink left. Spoon off excess fat if needed.
Build flavor: Stir in tomato paste, Worcestershire, thyme, and rosemary.
Cook 1–2 minutes until the tomato paste darkens slightly.
Thicken the sauce: Sprinkle flour over the mixture and stir for 30 seconds. Pour in beef stock, scraping up any browned bits. Simmer 5–7 minutes until glossy and thickened.
Stir in peas. Season generously with salt and pepper.
Assemble: Spoon the beef filling into the prepared dish. Top with mashed potatoes, spreading to the edges to seal.
Create ridges with a fork for a crisp top. Dot with a little butter.
Bake: Bake 20–25 minutes until the top is golden and the filling is bubbling at the edges. For extra color, broil for 2–3 minutes at the end, watching closely.
Rest and serve: Let it stand 10 minutes before serving so the layers set slightly.
Serve with green beans or a simple salad.