🐻 Early access - all features free for now. No credit card, no limits, no paywalls. Help us shape the product.
MarginCub

Menu Engineering Matrix - The Complete Guide to Stars, Puzzles, Plowhorses & Dogs

Most restaurant menus carry 2-4 dogs that quietly drain margin. Menu engineering is the quarterly habit that finds them, repositions the puzzles, and protects the stars. This guide walks the full process with worked examples, action playbooks, and a 30-day rollout plan.

M
MarginCub team
Β· Β· 12 min read

TL;DR. Plot every dish on popularity Γ— profitability. Stars (high both) = protect + promote. Puzzles (high margin, low popularity) = re-merchandise. Plowhorses (high popularity, low margin) = raise price or re-engineer. Dogs (low both) = cut. Cutting one dog typically lifts category margin 1-2 points without losing covers. Run quarterly. The full action plan is at the bottom.

A 70-seat restaurant in Brooklyn ran their first menu engineering analysis in March 2026. They cut three dogs (beet salad, calamari, vegan ravioli) and renamed two puzzles (the duck breast became "Pekin duck with cherry gastrique"; the cheese plate became "Vermont cheese trio with local honeycomb").

Net change in 60 days: revenue flat (+0.4%), food cost as a percentage of revenue down 1.8 points, contribution margin per cover up $2.40. On 850 covers a week, that's an extra $2,040/week flowing to the bottom line. Same kitchen, same staff, same rent. Just a different menu.

That's menu engineering. This guide walks through the full method - the four quadrants, the worked examples, the tactical playbooks for each, and the cadence to make it a habit instead of a one-time exercise.

What menu engineering actually is

It's a quantitative analysis that classifies every dish on your menu by two axes:

Plot all dishes on a 2Γ—2. Each lands in one of four quadrants. The matrix isn't the point - the decision per dish is.

                       PROFITABILITY (contribution margin)
                            HIGH              LOW
                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  HIGH β”‚   ⭐ STARS   β”‚ 🐴 PLOWHORSEβ”‚
   POPULARITY         β”‚  protect &  β”‚   raise     β”‚
                       β”‚   promote   β”‚  price or   β”‚
                       β”‚             β”‚  re-engineerβ”‚
                       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
                  LOW  β”‚  🧩 PUZZLES β”‚   🐢 DOGS    β”‚
                       β”‚ re-position β”‚     cut     β”‚
                       β”‚ rename, pushβ”‚             β”‚
                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The four quadrants - tactical playbook

⭐ Stars - protect aggressively

Definition: popular AND profitable. Usually 2-4 dishes per category. They are the spine of your menu.

The cardinal rule. Don't touch what's working. Don't shrink the portion to "save costs". Don't raise the price by $2 because greed. Customers notice changes to dishes they love. A $0.30 portion reduction on your hero burger costs more in customer trust than the savings.

Tactics:
- Menu position: top-right corner of their category (highest eye-read zone in left-to-right reading cultures)
- Visual treatment: box, highlight, or italicize. Don't overdo - more than 3 highlights per category dilutes
- Server training: pre-shift huddle - "If a guest is undecided, recommend the [dish]. It's our best."
- Photography: a single professional photo on Instagram or your website doubles a star's visibility. Worth the $200 for a food photographer
- Cost protection: stars are usually high-volume, so a 5% ingredient increase on a key SKU eats real margin. Recalculate FCP weekly on stars

🧩 Puzzles - your biggest growth lever

Definition: high margin, low popularity. The customer doesn't know they want it yet. Usually 2-4 per category.

This is where most operators leave the most money on the table. A $9 contribution-margin dish selling 80 times a month makes you $720 in margin. Push it to 200 sales (still well below your stars) and you're at $1,800 - an extra $1,080/month from one dish.

Why dishes get stuck as puzzles:
1. Boring name. "Roasted chicken" doesn't sell. "Cast-iron rosemary chicken with pan jus" does.
2. Bad menu position. Hidden in the lower-left corner where eyes barely land.
3. Server forgetfulness. Servers default to recommending stars (which sell themselves) and forget the puzzles.
4. No visual signal. No photo, no highlight, no story.

Tactics:
- Rename with sensory + origin language. Three pattern beats:
- "Pan-roasted" beats "Baked"
- "Sonoma" / "Vermont" / "Hudson Valley" beats "Local" or "Fresh"
- "Stone fruit" / "Heirloom" / "Cast-iron" beats no descriptor
- Reposition to higher-attention zones (top of section, near the stars)
- Server pre-shift script: "Push the duck today - margin is twice the chicken"
- Photograph it. Instagram-tag it. One viral post moves needle
- Suggestive selling: "If you liked the [star], you'll love the [puzzle]"
- Bundle it: pair the puzzle with a star as a prix-fixe

Why puzzles beat raising prices. Pushing a puzzle from 80β†’200 sales is a margin gain with zero customer pushback - you're just selling more of what already prices well. Raising prices on plowhorses is risky (will customers leave?). Pushing puzzles is upside without downside.

🐴 Plowhorses - three paths, one rule

Definition: popular but low margin. They drive volume but the volume isn't paying.

A plowhorse selling 400 units a month at $5 contribution margin = $2,000/month. The same 400 units at $7 contribution margin = $2,800. Same plate count, $800/month more profit.

Three escape routes:

1. Raise the price. Most plowhorses were under-priced at launch. Test a $1-2 increase. If demand is inelastic enough (popular = customers really want it), volume holds and margin lifts immediately.

2. Re-engineer cost. Swap a cheaper cut, slimmer portion, or cheaper side without breaking perceived value:
- Switch from sirloin to flat iron (saves $1.50/oz, similar quality)
- Reduce burger from 8oz to 7oz (most customers don't notice; you save $0.50/plate)
- Replace truffle oil garnish with chive oil (90% of customers can't tell)

3. Decommission quietly. If it's popular because it's the cheapest item (not because it's beloved), you can remove it and redirect traffic to a higher-margin dish in the same category.

The 35% rule. A plowhorse with FCP above 35% in casual dining is actively losing you money compared to a dog at 30% that nobody orders. Plowhorses bleed slowly. Dogs sit harmless. Always fix plowhorses before cutting dogs.

🐢 Dogs - cut fast, replace faster

Definition: low popularity AND low margin. Nobody orders it and when they do it doesn't pay.

Cut it. Reclaim:
- The SKU you're buying for
- The prep step in your kitchen workflow
- The training time for new staff
- The menu real estate pulling attention from your stars and puzzles
- The walk-in space holding ingredients with high spoilage risk

The only legitimate reason to keep a dog:
- Allergen-friendly token (gluten-free, vegan, kids menu) - you need at least one for menu-completeness even if it doesn't sell
- Loss-leader with strategic value (a $5 dessert that brings families in)
- Legacy dish with regular customers (the soup grandma orders every Sunday - cutting it costs more in regulars than the dish loses)

Audit these "exceptions" yearly. Most operators discover after analysis that the "loyal regular" was actually two people, not a base.

Worked example: full appetizer + entrΓ©e categories

A 70-seat casual Italian. Monthly POS data. Real-style numbers.

Appetizer category

Dish Price Food cost CM Sold Pop % Classify
Caesar salad $11 $3.09 $7.91 520 34% ⭐ Star
Wings (12 pc) $13 $4.85 $8.15 420 28% ⭐ Star
Mozzarella sticks $9 $3.30 $5.70 320 21% 🐴 Plowhorse
Burrata plate $14 $4.60 $9.40 180 12% 🧩 Puzzle
Beet & goat cheese salad $12 $4.20 $7.80 75 5% 🐢 Dog

Category average CM: $7.79. Category average popularity: 20%.

Decisions:
- Caesar + Wings (Stars): protect. Recalculate FCP weekly - any drift above 30% triggers menu reprint
- Mozzarella sticks (Plowhorse): $9 β†’ $10 test for 30 days. If volume holds, lock in. Margin lift: $0.85 Γ— 320 = $272/month
- Burrata (Puzzle): rename "Sonoma Burrata with Stone Fruit & Honeycomb". Move to top of section. Server push. Goal: 180 β†’ 280/month. Margin lift: $9.40 Γ— 100 = $940/month
- Beet salad (Dog): cut. Replace with seasonal grain bowl (higher CM target $9, broader appeal)

Projected monthly margin lift just from this category: ~$1,200/month. Annualized: $14,400.

EntrΓ©e category

Dish Price Food cost CM Sold Pop % Classify
Chicken parmesan $16 $4.20 $11.80 380 23% ⭐ Star
Spaghetti & meatballs $15 $4.05 $10.95 340 21% ⭐ Star
Lasagna $17 $5.95 $11.05 290 18% ⭐ Star
Eggplant parm $15 $5.20 $9.80 240 15% 🐴 Plowhorse
Branzino $28 $9.20 $18.80 110 7% 🧩 Puzzle
Veal piccata $24 $7.50 $16.50 95 6% 🧩 Puzzle
Vegan zucchini ravioli $17 $6.20 $10.80 65 4% 🐢 Dog (kept - vegan token)
Pollo alla cacciatora $19 $6.40 $12.60 100 6% 🐢 Dog

Category average CM: $12.79. Category average popularity: 12.5%.

Decisions:
- Three stars: protect. Note that lasagna FCP is 35% - watch for ingredient drift
- Eggplant parm (Plowhorse): portion ricotta down 0.5oz, swap parmesan for pecorino mix (saves $0.40/plate). Margin: $9.80 β†’ $10.20 Γ— 240 = $96/month. Or raise to $16. Try portion adjustment first
- Branzino + Veal (Puzzles): highest-margin items selling weakest. Photograph both. Server "premium picks" pre-shift. Goal: 110 β†’ 175 branzino. Margin: $18.80 Γ— 65 = $1,222/month
- Vegan ravioli (Dog, kept): needed for vegan completeness. Audit pricing - $17 to $19? Margin lift if volume holds
- Pollo alla cacciatora (Dog, cut): replace with a $19 short-rib pasta (target CM $12+, broader appeal)

Projected lift from entrΓ©e category: ~$1,800/month. Combined with appetizers: $3,000/month = $36K/year on just two category cleanups.

How to actually run this analysis

Step 1: pick a time window

One month is the standard. Long enough to smooth daily variance, short enough to reflect current menu and current ingredient prices.

Step 2: pull the data

For each dish in each category:
- Sold quantity (POS report)
- Current food cost per serving (this is where 80% of operators get it wrong - they use last year's costs)
- Menu price
- Contribution margin = menu price βˆ’ food cost
- Popularity = (this dish sold Γ· total category sold) Γ— 100

Step 3: set the thresholds

Pick "average" or "median" once and stick with it. Switching between them across analyses muddles the comparison.

Step 4: classify

Drop each dish into one of the four quadrants. The dish either qualifies for high or low on each axis.

Step 5: write the action

This is the step most operators skip. Write down what you're going to do with each dish. The analysis is decoration without an action column. Examples:
- "Caesar - protect, recalc FCP weekly"
- "Mozz sticks - $9β†’$10 test, review 30 days"
- "Burrata - rename, photograph, server push"
- "Beet salad - cut, replace with grain bowl"

Step 6: schedule the next review

30 days out. Did the puzzle move? Did the plowhorse hold volume at the new price? Did the dog replacement perform? Without the loop closure, half the value is gone.

Common mistakes

Mistake 1: comparing across categories. A $9 plowhorse appetizer is not in the same race as a $26 plowhorse entrΓ©e. Run the analysis per category, not for the whole menu at once.

Mistake 2: using stale ingredient costs. Recipes built on 2024 prices say chicken is $2.80/lb. Today it's $3.40/lb. Every dish using chicken is silently misclassified. Refresh ingredient costs before running the analysis. (Auto-recalc is exactly what MarginCub does.)

Mistake 3: keeping plowhorses "because they sell." Volume at a 40% FCP is not your friend. Volume at 28% FCP is. The plowhorse isn't your savior; it's a slow leak.

Mistake 4: hesitating on dogs. "Maybe it'll come back if we re-photograph it." It won't. If a dish is a dog at 30 days, it's a dog at 90 days. Cut and move on.

Mistake 5: running this once and stopping. Menu engineering is a quarterly rhythm. Ingredient prices drift. Customer tastes drift. Stars become plowhorses if you don't watch.

The 30-day rollout plan

Week 1 (3 hours)

Week 2 (1 hour)

Week 3 (1 hour)

Week 4 (15 minutes)

Day 60-90: review, adjust, repeat

Frequently asked questions

Q. What if my POS doesn't track sold quantities?
A. Most modern POS systems (Toast, Square, Lightspeed, Aloha) export sales by item. If yours doesn't, even hand-tracking with kitchen tickets for 30 days gives you 80% of the signal. Stop reading; start tracking.

Q. How do I run this for a takeout-only / ghost kitchen menu?
A. Same matrix, different popularity baseline. Ghost kitchens often have skewed popularity because of app algorithm visibility. Watch for positioning bias - a dish at the top of the DoorDash results page sells more regardless of margin. Account for that in your puzzle vs star classification.

Q. What's the difference between menu engineering and menu psychology?
A. Menu engineering is the data analysis. Menu psychology is the layout tactics that flow from it (eye-tracking zones, anchor pricing, decoy items, font weights). Engineering tells you which dishes to push; psychology is how the menu pushes them.

Q. Should I do this for drinks too?
A. Yes. Beverages typically have higher margins than food (18-22% beverage cost vs 28% food cost), so the math is simpler but the upside is real. Cocktails specifically often have one star carrying the whole list - identify it, push it.

Q. How big a margin should "high profitability" be?
A. Use category average. There's no absolute number. A $5 contribution margin is high in a fast-casual sandwich shop and low in a steakhouse. Always compare within category.

Read next

🐻

Apply this to your own menu in 5 minutes.

Free MarginCub calculator - enter ingredients, get total cost, per-serving cost, and food cost % live. No signup needed.

More guides