Prepare the beef. Pat the beef cubes dry with paper towels and season generously with salt and pepper.
Heat the oil. Heat the oil in a large Dutch oven over medium-high heat until shimmering.
Brown the beef. Add the beef in a single layer, in batches if needed, and sear for 2 to 3 minutes per side until deeply browned. Transfer to a plate.
Cook the onion and garlic. Reduce heat to medium, add the diced onion, and cook for 5 minutes until softened. Add the garlic and cook 1 more minute until fragrant.
Add the tomato paste. Stir in the tomato paste and cook for 1 to 2 minutes until it darkens.
Return the beef to the pot. Add the beef and any juices back to the pot, then pour in the beef stock, scraping the bottom to lift the browned bits.
Add the seasonings. Stir in the Worcestershire sauce, soy sauce, thyme, bay leaf, and pepper. Taste and adjust salt.
Simmer the stew. Bring to a gentle simmer, reduce heat to low, cover partially, and simmer for 1 hour, stirring occasionally.
Add the vegetables. Stir in the potatoes and carrots, then simmer for 30 more minutes until tender.
Thicken the stew. Whisk the cornstarch with cold water and stir into the stew. Simmer for 2 to 3 minutes until thickened.
Final simmer. Add the frozen peas if using and simmer 2 to 3 more minutes. Remove the bay leaf and adjust seasoning.
Serve warm. Ladle into deep bowls and serve hot with crusty bread or biscuits.