Menu engineering explained: stars, plowhorses, puzzles and dogs

How to sort your menu by popularity and contribution margin, what to do with each of the four classes, and a worked example you can copy.

Updated 25 Sep 2026 · 5 min read

Menu engineering is a way to decide what stays on the menu, what gets a new price and what gets more attention. It sorts every item by two questions: how often does it sell, and how much money does each sale leave you after the ingredients are paid for? Answer both for every item and the menu splits into four groups, each with an obvious next move.

You need two things to do it: sales counts for each item over a period, and an honest cost for each item. The second part is where most attempts fall apart, so start there.

Step 1: cost every item

Each item needs a plate cost: what the ingredients in one portion cost you at today's prices. That means a recipe with quantities, and a unit cost for each ingredient.

Plate cost = sum of (quantity of each ingredient × its unit cost)

Example: a breakfast sandwich uses one egg at $0.30, one muffin at $0.40, one slice of cheese at $0.25, two rashers of bacon at $0.50 each and $0.15 of butter and sauce. Plate cost: 0.30 + 0.40 + 0.25 + 1.00 + 0.15 = $2.10.

Use what you actually pay, from recent invoices, not what you paid when you wrote the menu. If supplier prices move and your recipe costs don't, every result below is wrong.

Step 2: work out contribution margin

Contribution margin = menu price − plate cost

This is the money each sale contributes toward labor, rent and profit. It's measured in dollars, not percent, on purpose. A $9 sandwich with a $2.10 plate cost leaves $6.90. A $4 coffee with a $0.40 cost leaves $3.60. The coffee has the better food-cost percentage, but the sandwich leaves more money per sale. Menu engineering cares about the dollars.

Then find the average contribution margin across the menu, weighted by how many of each you sold:

Average contribution margin = total contribution margin ÷ total items sold

Step 3: work out popularity

Popularity (menu mix %) = items of this kind sold ÷ total items sold × 100

An item is "popular" if its share is at or above the line you set. A simple line is an equal share: with 10 items, that's 10% each. Some operators set the line lower than an equal share, so that an item only counts as unpopular when it's clearly lagging. Pick one rule and keep it, so results are comparable month to month.

Compare items within the same section. A side salad and a main shouldn't compete for popularity.

Step 4: sort into four classes

Margin at or above average Margin below average
Popular Star Plowhorse
Not popular Puzzle Dog

Keep them exactly as they are, and make them easy to find. Put them where eyes land first on the menu, name them on the specials board, and train the team to recommend them. Be careful with changes to recipe or portion.

Guests love them, but each sale leaves less than average. Don't remove them. Try a small price increase, a cheaper garnish, a smaller portion of the most expensive ingredient, or pairing them with a high-margin side or drink.

The margin is there but the orders aren't. Work out why. Is it badly placed, badly named, badly described, or priced above what guests expect? Promote it, move it, rename it, or have staff suggest it. If none of that works after a fair try, it may be a dog after all.

Dogs: unpopular and thin margin

Rework or drop them. The exception is an item that brings a specific group through the door, such as the only vegan main or a regular's favorite. Keep those on purpose, not by accident.

A worked example

Example: a café sandwich section over one month, with made-up round numbers.

Item Sold Price Plate cost Margin Mix % Class
Breakfast sandwich 400 $9.00 $2.10 $6.90 40% Star
Grilled cheese 300 $7.00 $1.80 $5.20 30% Plowhorse
Smoked salmon bagel 100 $12.00 $4.50 $7.50 10% Puzzle
Veggie wrap 200 $8.00 $3.20 $4.80 20% Dog

Total sold: 1,000. Total margin: (400 × 6.90) + (300 × 5.20) + (100 × 7.50) + (200 × 4.80) = 2,760 + 1,560 + 750 + 960 = $6,030. Average margin: $6,030 ÷ 1,000 = $6.03.

Popularity line: four items, so an equal share is 25%.

  • The breakfast sandwich is above 25% and above $6.03: a star.
  • The grilled cheese is above 25% but below $6.03: a plowhorse. A $0.75 price increase would lift its margin to $5.95, almost average.
  • The salmon bagel has the best margin but only 10% of sales: a puzzle. Move it higher on the board and have staff offer it with coffee.
  • The veggie wrap is below both lines: a dog. Before dropping it, check whether it's the only vegetarian option.

Step 5: test price changes before you print

Before you change a price, estimate what happens. If the grilled cheese goes up $0.75 and you still sell 300, you gain $225 a month. If sales drop to 270, you still gain: 270 × $5.95 = $1,606.50, against $1,560 now. Knowing the break-even volume helps you decide how brave to be.

Re-run the analysis after each change, over the same length of period, so you can see whether it worked.

How often to do it

Monthly is a good rhythm, and after any big supplier price change. Use at least a few weeks of sales so one slow day doesn't move an item between classes.

How Ospelia does it

Ospelia's Menu engineering page plots every item by how often it sells and its contribution margin, sorts it into stars, plowhorses, puzzles and dogs with what to do about each, and has a simulator so you can try a new price and see where the item lands before you change the menu. Items linked to a recipe get real margins, and the page shows how many of your sold items are linked.

The costs come from Recipes & plate cost: ingredients drawn from inventory at your real unit costs, so when a supplier price changes, every plate that uses it moves too.

Do the math once. Then let it keep up.

Menu engineering is part of Ospelia. Unlimited users, from $249 a location a month. Set up in about fifteen minutes.

7 days free · cancel any time