Cook the base. Heat olive oil in a large skillet over medium-high heat. Add onion and cook until softened, about 5 minutes. Add garlic and cook 1–2 minutes more.
Brown the beef. Add ground beef and cook until no pink remains. Carefully remove excess grease.
Build flavor + thickness. Add rosemary, thyme, salt, and pepper. Stir in flour, Worcestershire sauce, tomato paste, and Better Than Bouillon. Cook for 2–3 minutes, stirring, until the mixture looks slightly thickened and glossy.
Add liquid and reduce. Pour in beef broth and stir well. Let simmer for 2–3 minutes until slightly thickened.
👉 The mixture should look thick and glossy, not watery, before transferring to the slow cooker.
Slow cook. Transfer to slow cooker. Cover and cook on HIGH for 2–2½ hours (or LOW for 4 hours).
Add vegetables. Stir in frozen peas and carrots during the last 60–90 minutes of cooking so they stay tender, not mushy.
Make mashed potatoes. Add potatoes and garlic to a large pot. Cover with salted water and boil until fork-tender. Drain, then mash with butter and cream until smooth. Season to taste. Stir in Parmesan if using.
Assemble. Spoon mashed potatoes over the filling and spread evenly with the back of a spoon or fork.
Reduce moisture. Place a layer of paper towel under the lid to absorb condensation and keep the topping from getting soggy.
Rest briefly. Turn off the slow cooker and let sit for 5–10 minutes before serving.
Optional finish (recommended).
👉 For a more classic finish, transfer to a baking dish and broil 3–5 minutes until lightly golden.