RecipeBeef & Lamb

Beef and Chinese broccoli stir-fry (芥蓝牛肉)

Tasty, succulent and easy to cook, beef & Chinese broccoli is a classic Cantonese stir-fry. Follow my tips to cook it to perfection.

Published by CharWok

🥢 Beef & LambStir-fries⏱ Prep 10 min🔥 Cook 5 min🕒 Total 15 min🍽️ 2 servings
Glossy thin beef slices with bright-green Chinese broccoli stems and leaves, sliced garlic, and ginger on a white oval plate

The reason restaurant Cantonese beef tastes slippery and tender while yours turns leathery is not a secret ingredient. It is a two-minute marinade and a hot wok. Beef and Chinese broccoli (gai lan) is the dish that taught me this. I ruined it three times before I understood that the tenderizing happens before the stove ever goes on, and that the cooking itself is over in under five minutes.

This is the gai lan version of the stir-fry you probably know as beef and broccoli from takeout menus. Same idea, better vegetable. Gai lan has a bittersweet, slightly earthy edge that Western broccoli lacks, and its stems hold a satisfying snap when you cook them right. The pairing is classic Cantonese home cooking, quick enough for a weeknight but with a texture that reads as restaurant-level if you respect a few details.

At a glance: Slice 200 g beef paper-thin across the grain, velvet it with cornstarch and water for at least 15 minutes, then seal it with oil. Cook the gai lan stems, then leaves, then beef, each on its own, in a smoking-hot wok. Finish with an oyster-sauce slurry that thickens in about 20 seconds. Total active cooking is roughly 4 minutes; the marinating is the part everyone skips and the reason everyone's beef is tough.

What gai lan actually is

Gai lan (芥蓝, sometimes written kai-lan) is Chinese kale, not a broccoli at all despite the English name. Both leaves and pale green stems are edible, and unlike Western broccoli there are no dense florets to slow you down. The stems are the prize: when blanched or flash-fried they keep a juicy crunch that softer greens cannot match. If you want to cook the vegetable on its own first, the two-method gai lan guide walks through a quick blanch and a garlic stir-fry that pair well with almost any protein.

One honest note: gai lan is not great raw. The stems are too fibrous and the flavor is too assertive. This is a vegetable that wants heat, and the heat wants to be brief.

Why the beef needs velveting, not just marinating

The single biggest mistake home cooks make with stir-fried beef is skipping the cornstarch step. A plain soy-and-wine marinade flavors the meat but does nothing to protect it from the brutal heat of a wok. Cornstarch does two things at once: it forms a thin gel layer that buffers the muscle fibers from direct pan contact, and it traps the meat's own juices so they cannot evaporate before the beef is cooked through. That gel layer is the difference between velvet and cardboard.

The finishing teaspoon of oil in the marinade is not for flavor. It coats each slice so they slide apart instead of clumping, and it buys you a few extra seconds of grace at the start of cooking before the pan recovers its heat. If you have ever marinated beef and watched it weld itself into a single gray lump the moment it hit the wok, this is the fix.

Ingredients

Ingredients at a glance

Beef and Chinese broccoli ingredients labeled in English: 200 g or 7 oz flank or skirt beef, 1 teaspoon julienned ginger, 1 teaspoon light soy sauce, 1 teaspoon Shaoxing wine, 1 teaspoon marinade cornstarch plus 2 teaspoons sauce cornstarch, 1 tablespoon marinade water plus 2 tablespoons sauce water or stock, 1 teaspoon marinade-sealing neutral oil, 300 g or 6 to 7 stalks Chinese broccoli, half a teaspoon dark soy sauce, 1 tablespoon oyster sauce, 1 teaspoon toasted sesame oil, 4 sliced garlic cloves, and 2 tablespoons divided stir-frying oil
Use the ingredient table below for exact amounts and substitutions.

Flank or skirt steak is the right call here; both have visible grain you can slice across, and both stay tender with a short cook. Avoid chuck or round unless you are willing to use the baking-soda method in the troubleshooting section. For the liquid in the sauce, water works, but a spoonful of homemade chicken stock adds a roundness water cannot.

IngredientAmountNotes / substitute
Beef (flank or skirt)200 g (7 oz)Slice across the grain, 2 mm thick. Sirloin works; chuck needs tenderizing (see troubleshooting).
Ginger, julienned1 tsp1 tsp minced ginger paste in a pinch.
Light soy sauce1 tspDo not substitute dark soy here; it is too thick and dark. See light vs. dark soy sauce.
Shaoxing rice wine1 tspDry sherry is the closest Western substitute; skip the cooking wine with salt.
Cornstarch1 tsp (marinade) + 2 tsp (sauce)Potato starch works and gives a slightly glossier finish.
Water1 tbsp (marinade) + 2 tbsp (sauce)Use stock for the sauce if you have it.
Cooking oil (marinade seal)1 tspNeutral oil: canola, grapeseed, avocado.
Chinese broccoli (gai lan)300 g (6 to 7 stalks)Tender-stem broccoli (broccolini), celtuce, or celery all work; blanch regular broccoli florets first.
Dark soy sauce1/2 tspFor color. Omit if you only have light; the dish will be paler but still good.
Oyster sauce1 tbspVegetarian mushroom oyster sauce is a fine swap and keeps the dish vegan with tofu beef.
Toasted sesame oil1 tspAdded to the sauce, not the pan; heat kills its aroma.
Garlic, sliced4 clovesSmashed whole cloves if you prefer to fish them out.
Cooking oil (for stir-frying)2 tbspDivided: 1 tbsp for the vegetable, 1 tbsp for the beef.
Serves 2 as a main with rice; allow roughly 475 kcal per serving.

Method

  1. Prep the beef for clean slicing. If you have time, freeze the steak for 60 to 90 minutes until it is firm but not rock-hard. Partially frozen meat slices cleanly and evenly, and even thickness is what lets every piece cook at the same rate. Identify the direction of the muscle fibers and cut perpendicular to them, about 2 mm thick. Cutting across the grain shortens the fibers so your teeth can get through them; cutting with the grain leaves long, chewy strands no marinade can save.
  2. Velvet the beef. In a bowl, combine the beef with the ginger, light soy, Shaoxing wine, 1 tsp cornstarch, and 1 tbsp water. Mix with your fingers or chopsticks until the liquid is fully absorbed and the bowl looks dry. Then drizzle in 1 tsp oil and toss to coat. Let it sit at least 15 minutes, or up to 4 hours refrigerated. Skipping the rest works, but the texture is noticeably less silky.
    Thin raw beef slices and ginger are turned with chopsticks after the velvet marinade has absorbed while the final oil is added with no liquid pooled below

    Mix until the marinade is fully absorbed and no liquid remains at the bottom, then add the oil last.

  3. Split the gai lan. Cut the stalks into 8 cm (3 inch) lengths and physically separate the thicker stems from the leafy tops. They cook at different rates, and putting them in together is how you end up with mushy leaves and underdone stems.
    Chinese broccoli is prepared beside a cleaver as one distinct pile of 3 cm split stems and another pile of leafy tops

    Separate the stems from the leaves, cut them into 3 cm lengths, and split thick stems lengthwise so they cook evenly.

  4. Mix the sauce in one bowl. Stir together the oyster sauce, dark soy, sesame oil, 2 tsp cornstarch, and 2 tbsp water or stock. Set it next to the stove. The cornstarch will settle to the bottom within a minute, so give it another stir right before it goes in.
  5. Heat the wok until it smokes. Set a carbon-steel or cast-iron wok over high heat until a drop of water dances and evaporates instantly. Add 1 tbsp oil, swirl, then the garlic and the gai lan stems. Stir for about 60 seconds, just until the stems brighten. Toss in the leaves; the moment they collapse, scoop everything onto a plate and leave the burner on. This is the Cantonese "hot wok, cool oil" principle, and if your wok tends to stick, the guide on choosing, seasoning, and using a carbon-steel wok explains why it works.
    Bright-green Chinese broccoli stems, just-wilted leaves, and sliced garlic are lifted from a hot wok with no pooled water

    Fry the stems for about 1 minute, add the leaves only until just wilted, then remove everything from the wok.

  6. Cook the beef on its own. Add the remaining 1 tbsp oil to the hot wok and spread the beef in a single layer. Let it sear for 15 to 20 seconds before stirring, then toss just until the red is gone, about another 45 seconds. Pulling the beef the instant it loses its pinkness is the single most important timing call in the whole dish; it will finish cooking in the sauce.
    Thin beef slices with light-golden contact patches and no visible pink are lifted from a hot wok

    Let the first side make contact and color lightly, then toss and remove the beef as soon as no pink remains.

  7. Bring it together. Return the gai lan to the wok, give the sauce one final stir, and pour it in. Toss constantly. The cornstarch gelatinizes and the sauce will thicken and glaze everything in roughly 20 seconds. Kill the heat the moment it clings rather than pools. Overcooking at this stage turns the beef gray and the gai lan olive-drab.
    Thin beef and bright-green Chinese broccoli carry a glossy glaze while the spatula leaves a clean trail on the wok with no sauce pool

    Restir the sauce before pouring; turn off the heat as soon as the glaze clings to the beef and greens without pooling.

  8. Serve now. Slide it onto a warm plate over freshly steamed jasmine rice. This is not a dish that waits.

When it goes wrong, and how to fix it

I have made every one of these mistakes. Here is what to look for and what to do about it.

The beef is tough and chewy

Almost always one of three things: you sliced with the grain, you skipped the cornstarch, or you overcooked. Check your knife angle first. If the cut is right and the marinade was on, the culprit is timing. The beef should leave the heat the moment the last trace of pink disappears, because it keeps cooking in the sauce. If you are stuck with a genuinely tough cut like chuck or round, use the baking-soda trick: toss the sliced beef with 1/4 tsp baking soda, rest 30 minutes, then rinse in 250 ml water with 2 tsp vinegar and drain well before marinating. The alkali relaxes the muscle proteins. It works, but it leaves a faintly soapy taste if you do not rinse thoroughly, so I only reach for it when the cut gives me no choice.

The beef sticks and shreds in the pan

The wok was not hot enough, or you added cold beef straight from the fridge. Get the pan smoking before the oil goes in, let the beef sit undisturbed for those first seconds so a crust can release on its own, and do not crowd the pan. If you are doubling the recipe, cook the beef in two batches; piling it in lowers the pan temperature and you end up steaming, not searing.

The gai lan stems are still fibrous

Older, thicker stalks have a tough outer skin. Peel the bottom 5 cm of each stem with a vegetable peeler the way you would peel asparagus. If the stems are very thick, blanch them in boiling salted water for 30 seconds before the stir-fry so they hit the wok already half-tender. The leaves should never see the blanching water; they wilt in seconds in the pan.

The sauce is watery, or gloppy

Watery usually means you added the sauce before the pan was hot enough, or the gai lan leaves wept moisture because they were overcooked. Gloppy means too much cornstarch or too long on the heat. The slurry should thicken in under 30 seconds; the second it coats the back of a spoon, the dish is done. If you want extra sauce to soak into rice, scale the whole sauce block up by half rather than just adding more cornstarch.

The dish tastes dull

Usually under-salted or missing aroma. Oyster sauce carries most of the seasoning, so check that yours is a real oyster sauce and not a cheap imitation. A few slices of ginger in the marinade and the garlic in the pan are doing real work; do not cut them. A few drops of toasted sesame oil at the end, never at the start, lifts everything.

Variations and pairings

The beef-and-gai-lan technique is a template. Once the velvet-and-stir-fry rhythm is in your hands, you can point it elsewhere.

Storage and reheating

This dish is best eaten immediately, and I will not pretend otherwise. Leftovers keep in the fridge for up to 2 days but the gai lan softens and the beef tightens. To reheat, use a hot pan with a splash of water and move fast; the microwave turns the beef gray and rubbery. If you are meal-prepping, cook the beef and gai lan separately and combine them only when reheating, so the vegetable retains some bite.

Frequently asked questions

A few things readers ask again and again.

Can I use regular broccoli instead of gai lan? Yes. Blanch the florets for 60 seconds first, because they are denser and will not cook through in the short stir-fry window.

Is the baking-soda tenderizing step required? No. Use it only for naturally tough cuts like chuck or round. For flank or skirt, the cornstarch marinade is enough.

Why coat the marinated beef with oil at the end? The oil keeps the slices from sticking to each other and to the pan, and gives you a few extra seconds before the meat seizes in the heat.

Can I make it ahead for a crowd? Prep and marinate the beef and chop the gai lan hours in advance, but cook it at the last minute. Stir-fried beef does not hold; the texture collapses as it sits.

Is there a gluten-free version? Use tamari instead of soy sauce and a gluten-free oyster sauce. The cornstarch is already gluten-free.