Pat the beef dry and season generously. Use paper towels to dry the cubes well. Season with salt and pepper.
Dry beef browns better and builds more flavor.
Brown the beef in batches. Heat olive oil in a heavy pot or Dutch oven over medium-high heat. Add a single layer of beef and sear on all sides until deep brown, about 6–8 minutes per batch. Don’t crowd the pot.
Transfer browned beef to a plate and repeat.
Sauté the aromatics. Reduce heat to medium. Add onion and a pinch of salt; cook until softened, 4–5 minutes. Stir in garlic and cook 30 seconds until fragrant.
Build the base with tomato paste. Stir in tomato paste and cook for 1 minute to caramelize slightly.
This step boosts the stew’s depth.
Deglaze the pot. Pour in the red wine (if using). Scrape up the browned bits from the bottom of the pot—they’re pure flavor. Let the wine simmer for 2–3 minutes to reduce a bit.
Add the liquids and seasonings. Return the beef and any juices to the pot.
Add beef broth, bay leaves, thyme, rosemary, and Worcestershire sauce. Bring to a gentle boil.
Simmer low and slow. Reduce heat to low, cover, and simmer for 60 minutes, stirring occasionally. Keep the simmer gentle to keep the beef tender.
Add vegetables. Stir in carrots, potatoes, and celery.
Cover and simmer another 30–40 minutes, until the vegetables are tender and the beef is fork-soft.
Thicken the stew. In a small bowl, mix flour with a splash of broth or water to make a smooth slurry. Stir it into the stew and simmer uncovered 5–10 minutes until thickened to your liking. For gluten-free, use cornstarch mixed with cold water.
Finish and season. Stir in butter for a glossy finish (optional).
Taste and adjust salt and pepper. Remove bay leaves and any woody herb stems.
Garnish and serve. Sprinkle with chopped parsley. Serve hot with crusty bread or over mashed potatoes.