Beef and broccoli is the dish that taught me the difference between cooking and stir-frying. For years mine came out chewy and grey, the florets either raw or waterlogged, the sauce pooling at the bottom of the plate. The fix wasn't a new wok or fancier beef. It was a ten-minute marinade I'd been skipping, and a cook's instinct for when to pull the meat off the heat before it tightens up.
The whole thing comes together in under ten minutes of actual cooking, but almost everything that matters happens before the beef touches the pan. That is the part most home recipes gloss over, and it is exactly where this one spends its time.
Velvet the beef with a pinch of baking soda and cornstarch for 15 minutes, blanch the broccoli just long enough to set its color, then sear the beef hot and pull it at first sight of brown. The sauce, built on 2 tablespoons of oyster sauce to 1½ tablespoons of cornstarch, thickens in seconds once the meat goes back in. Skip the marinade and you have a different, worse dish.
What this dish actually is
What Americans order as Beef and Broccoli is a takeout adaptation of a Cantonese home classic, beef stir-fried with gai lan (Chinese broccoli). When the dish crossed the Pacific, Western broccoli replaced the gai lan because it was what grocery stores stocked, and the sauce grew sweeter and glossier to match American-Chinese tastes. The original, stir-fried beef with Chinese broccoli, is leaner and more bitter in the best way. Both are worth cooking. This recipe leans into the takeout version because that is what most readers are chasing, but it uses the Cantonese trick that makes restaurant beef feel impossible to replicate at home: velveting.
If you want a quick tour of where beef stir-fries sit in the cuisine, the same family includes black pepper beef, pepper steak, and the darker, earthier Hunan beef. Beef and broccoli is the mildest of the group, which is also why kids and cautious eaters reach for it first.
Ingredients
Ingredients at a glance

Quantities are scaled to serve four with rice. I use grams where precision matters (the marinade, the thickener) and household measures where it doesn't.
| Ingredient | Amount | Notes / substitute |
|---|---|---|
| Beef (flank, skirt, or sirloin) | 450 g (1 lb) | Flank is my default. Slice across the grain into 5 mm (¼ in) strips. |
| Baking soda | 1.2 g (¼ tsp) | The tenderizer. Do not exceed this; more leaves a soapy taste. |
| Salt | 0.7 g (⅛ tsp) | |
| Cornstarch | 4 g (½ tbsp) | Tapioca starch works and gives a clearer gloss; potato starch is too heavy here. |
| Light soy sauce (marinade) | 15 ml (1 tbsp) | Use light, not dark, for the marinade. See light vs. dark soy sauce. |
| Water (marinade) | 30 ml (2 tbsp) | Helps the meat hydrate. Rub until fully absorbed. |
| Neutral oil (marinade) | 7 ml (½ tbsp) | Canola, grapeseed, or avocado. Seals in the coating. |
| Oyster sauce | 30 ml (2 tbsp) | The backbone of the sauce. A good brand reads sweeter and less salty. |
| Shaoxing rice wine | 15 ml (1 tbsp) | Dry sherry is the closest substitute; skip the cooking wine with salt. |
| Light soy sauce (sauce) | 7 ml (½ tbsp) | |
| Dark soy sauce | 7 ml (½ tbsp) | For color. Omit if you only have light; the dish will be paler but fine. |
| Cornstarch (thickener) | 12 g (1½ tbsp) | Sets the glossy cling. Stir the sauce right before pouring; starch sinks fast. |
| Sugar | 4 g (1 tsp) | Regular white sugar. Rounds the salt without making it sweet. |
| Ground white pepper | 0.7 g (⅛ tsp) | White, not black; black flecks fight the clean look of the sauce. |
| Toasted sesame oil | 2.5 ml (½ tsp) | Added raw at the end; never as a frying oil. |
| Water (sauce) | 45 ml (3 tbsp) | Adjust if you like a looser sauce. |
| Broccoli | 1 head, about 300 g (10 oz) | Western broccoli. Gai lan or broccolini also work; blanch a little longer. |
| Neutral oil (for cooking) | 30 ml (2 tbsp), divided | You'll use 1½ tbsp to sear the beef and ½ tbsp for aromatics. |
| Garlic, minced | 1 tbsp (about 3 cloves) | |
| Ginger, minced | 1 tsp (about a 2 cm piece) |
Why the marinade does the heavy lifting
This is the step most recipes bury in a footnote, so I'll put it up front. The baking soda raises the surface pH of the meat. Higher pH means the muscle fibers hold on to more water as they cook, so the beef stays juicy even after a fast, hot sear. The cornstarch coats each strip in a thin gel that buffers it from direct pan heat and gives the sauce something to cling to later. Together they recreate the slippery, almost bouncy texture you associate with restaurant beef.
Rubbing the liquid in by hand matters. It looks like nothing is happening for the first few seconds, then the meat drinks the soy-water-starch slurry and turns glassy. The final drizzle of oil seals that coating so it doesn't wash off when the beef hits the pan. If you skip the resting time and go straight to cooking, the baking soda never gets a chance to work and you've wasted the effort.
The method
- Marinate the beef (15 min, mostly hands-off). Cut the beef across the grain into strips about 5 mm thick. Cutting across shortens the muscle fibers; cutting with the grain leaves long, chewy strands no amount of tenderizing will fix. Add the baking soda, salt, cornstarch, light soy, and water. Rub with your fingers until the liquid disappears into the meat, then stir in the oil. Rest at room temperature 15 minutes, or refrigerate up to a few hours.

Rub until the water and seasonings are fully absorbed, then mix in the oil last and rest the beef for 15 minutes.
- Mix the sauce. In a small bowl, combine oyster sauce, Shaoxing wine, light and dark soy sauce, cornstarch, sugar, white pepper, sesame oil, and water. Stir now and again right before you use it, because the starch settles to the bottom within minutes.

Stir the sauce again immediately before cooking so the settled cornstarch is evenly resuspended.
- Blanch the broccoli. Cut the head into bite-sized florets, and don't discard the peeled stem; it's the sweetest part. Bring a generous amount of water to a rolling boil in your wok or a wide skillet. Drop in the broccoli and blanch 60 to 90 seconds, until the color snaps to bright green and a paring knife meets just a little resistance. Drain immediately. The goal is to set the color and start the cooking, not to finish it; the florets will cook again in the sauce. Blanching also rinses off the dusty raw flavor you can never quite stir-fry out of thick stems.

Lift the broccoli when it turns bright green and a knife meets slight resistance in the thick stem, then drain well.
- Sear the beef. Wipe the wok dry and heat it over medium-high until a drop of water dances and evaporates in a second. Add 1½ tablespoons of oil, swirl, then add the beef in a single layer. Leave it alone for about 30 seconds so the underside browns, then flip and toss for another 30 seconds. The moment the surface pink is gone, move the beef and any juices to a plate. Pulling the meat now is the single most important timing call in the whole dish; it finishes cooking in the sauce, and meat that's already fully done will be overcooked by the end.

Remove the beef as soon as every visible surface is opaque; it will finish cooking when returned to the wok.
- Build the sauce and finish. With the wok off high heat, add the remaining ½ tablespoon of oil, the garlic, and ginger. Stir for 10 to 15 seconds, just until fragrant; burnt garlic turns bitter and there's no rescue. Lower the heat to medium-low and pour in the sauce, stirring the bowl one last time first. As soon as it bubbles and turns glossy, return the broccoli and the beef (with its resting juices) to the wok. Toss for 20 to 30 seconds, until everything is coated and the sauce clings. Pull it while the sauce is still a touch looser than you want; it thickens further as it cools on the plate.

Toss only until the thin glossy sauce coats the beef and broccoli while remaining slightly loose, then serve immediately.
When things go wrong
The beef is chewy, not tender. Almost always one of three things: you cut with the grain instead of across it, you skipped the baking soda, or you didn't rest the marinade long enough. The fix is upstream, in the slicing and the marinade. If you're using a tougher, cheaper cut, the velvet step is non-negotiable; the same treatment rescues lean cuts that would otherwise be too firm for a quick stir-fry.
The meat tastes soapy or metallic. You used too much baking soda. Stick to the ¼ teaspoon in the recipe and don't be tempted to add more. If it already happened, a quick rinse under cold water and a longer marinade with a squeeze of water can blunt it, but prevention is the only real answer.
The sauce is thin and runs onto the plate. The cornstarch didn't have time or heat to gelatinize, or the bowl wasn't stirred before pouring and the starch stayed at the bottom. Bring the sauce to a full, glossy bubble before adding the beef and broccoli, and give the bowl a stir every time.
The sauce is gummy and dull. Too much starch or too little liquid, or you cooked it too long after it thickened. Pull the wok off the heat the moment the sauce coats the back of a spoon. A tablespoon of hot water loosens it if you've already gone too far.
The broccoli is either raw in the stem or mushy at the tips. Your florets are uneven. Cut them to a uniform size, peel the thick stem skin off, and blanch by time, not by eyeballing the color. For thicker stems, score the base of the stalk so it cooks through at the same rate as the florets.
The beef sticks and tears when you try to flip it. The pan wasn't hot enough, or you didn't use enough oil, or you tried to flip too early. Wait the full 30 seconds; properly seared beef releases on its own. A pat of extra oil and a hotter preheat solve most sticking.
Variations and what to serve it with
This is a sauce-and-technique template more than a fixed recipe. Once you can velvet and sear beef, you can swap the vegetable: try it with beef and king oyster mushroom for a deeper, earthier version, or push toward the original Cantonese dish by using gai lan in place of Western broccoli. A spoon of fermented black bean sauce stirred into the sauce makes it more savory and a little funky. A heavier hand of white pepper, or a pinch of crushed Sichuan peppercorn, points the dish toward spicier, earthier territory.
For a full takeout spread, serve it over freshly steamed jasmine rice with a side of lo mein or a bowl of hot and sour soup. If you want to lean vegetarian at the table, a quick broccoli with garlic sauce uses the same blanching logic with no meat at all, and shrimp and broccoli runs the same blueprint for a lighter protein. For the sauce pantry itself, the breakdown in the ten condiments a Chinese kitchen actually needs is a good place to start if oyster sauce or Shaoxing wine is new to you.
Storage and reheating
Leftovers keep three days in the fridge in a sealed container. The broccoli softens a little overnight, which some people prefer. Reheat gently in a covered pan with a splash of water over low heat; a microwave on medium works in a pinch but will toughen the beef if you go too hot. I don't recommend freezing; the cornstarch sauce breaks and the broccoli turns watery on thaw.
Frequently asked questions
Can I skip the baking soda?
You can, but the texture will be noticeably firmer and closer to a home-style stir-fry than a restaurant one. The cornstarch alone gives some slip; the baking soda is what makes the difference most people are actually tasting.
Do I have to blanch the broccoli first?
Yes, for this style of sauce. Raw florets release water as they cook and thin the sauce, and the stems won't soften in the few seconds the beef needs. Blanching sets the color and starts the cooking so everything finishes together.
What's the best beef cut for this?
Flank steak, sliced thin across the grain. Skirt and sirloin also work well. Avoid stew cuts like chuck or brisket; they need long, slow braising and will be tough no matter how you velvet them.
Can I make this ahead for a crowd?
Marinate and slice the beef up to a day ahead and keep it refrigerated. Mix the sauce and blanch the broccoli a few hours ahead. Do the final sear and combine at the very last minute; the texture falls off fast once the dish is fully assembled.
Cornstarch or tapioca starch?
Both work. Cornstarch is the default and gives the classic cloudy-thick cling. Tapioca makes a clearer, glossier, slightly more elastic sauce. Use the same amount either way.



