Brown the beef: Pat beef dry and season with salt and pepper. Heat oil in a heavy pot over medium-high.
Brown the beef in batches, 3–4 minutes per side. Transfer to a plate.
Sauté the aromatics: Add onion, carrot, and celery to the pot. Cook 5–6 minutes, scraping up browned bits.
Stir in garlic and tomato paste; cook 1 minute until fragrant.
Deglaze and simmer: Pour in red wine (if using) and reduce by half. Add beef stock, Worcestershire, bay leaves, thyme, and the browned beef with juices. Bring to a gentle simmer.
Cook low and slow: Cover and simmer on low for 1.5 to 2 hours, stirring occasionally, until beef is very tender.
Skim any excess fat if needed.
Thicken the stew: If you prefer a thicker gravy, stir flour or cornstarch with a little cold water to make a slurry. Add to the stew and simmer 5–10 minutes until it thickens. Stir in peas and turn off the heat.
Adjust salt and pepper.
Make the mashed potatoes: While the stew finishes, boil potatoes in salted water until fork-tender, 15–20 minutes. Drain well, then mash with butter and warm milk or cream. Season to taste.
Serve: Spoon mashed potatoes into bowls.
Ladle beef stew over the top. Garnish with chopped parsley if you like.