Menu engineering sorts every dish on your menu into one of four groups using two numbers: how many plates of it you sell, and how much money each plate leaves you after its food cost. A dish that sells well and earns well is a Star. One that sells well but earns little is a Plowhorse. One that earns well but rarely sells is a Puzzle. One that does neither is a Dog.
Michael Kasavana and Donald Smith set out the method in 1982, in their book Menu Engineering: A Practical Guide to Menu Analysis. You can run it with a sales report from your register, your recipe costs and a spreadsheet. Below, six dishes go through it step by step.
The dishes and numbers are made up and rounded so the math is easy to follow. Use your own.
The two numbers you need for each dish
Plates sold. How many times the dish was ordered in the period. It comes from your POS (point of sale, the system your servers ring orders into), usually in a report called product mix or item sales.
Contribution margin. The money one plate leaves you after the food on it is paid for.
Contribution margin = menu price − plate cost
Plate cost is what the food on one plate costs you at today's prices (how to cost a recipe shows how to work it out). Fish tacos that sell for $18 with $5 of food on the plate have a contribution margin of $13. That $13 pays for labor, rent and your other bills. Profit is what is left.
Menu engineering ranks dishes by these dollars per plate. Food cost percentage can point you the wrong way here. A steak at 47% food cost can leave you $18 a plate while a burger at 33% leaves $10, and you pay your bills in dollars.
For the menu price, use what guests paid on average: net sales for the dish divided by plates sold. Discounts, comps and happy-hour prices pull it below the printed price.
Test 1: is the dish popular?
Compare each dish's share of plates sold with an even share. Kasavana and Smith count a dish as popular when its share is at least 70% of an even share.
Even share = 100% ÷ number of dishes Popular cutoff = 70% × even share Popular = dish's share of plates sold ≥ popular cutoff
With six dishes, an even share is 16.7% and the cutoff is 11.7%. The cutoff sits below a full even share because sales are never spread evenly. A few dishes always outsell the rest, so a full even share would mark more than half of most menus as unpopular.
Run the test on one menu section at a time, mains against mains and starters against starters, as the original method does.
Test 2: is the dish profitable?
Compare each dish's margin with the average margin of a plate you sold.
Total margin for a dish = margin per plate × plates sold Average margin = total margin of all dishes ÷ total plates sold Profitable = dish's margin per plate ≥ average margin
This average is weighted by sales. A dish that sells 400 plates counts four times as much as one that sells 100. A plain average of the six margins would let your slowest dish move the line as much as your best seller.
The four groups
| Margin below average | Margin at or above average | |
|---|---|---|
| Popular | Plowhorse: popular, thin margin, cut its cost | Star: popular and profitable, protect it |
| Not popular | Dog: unpopular and unprofitable, rework or drop it | Puzzle: profitable, rarely ordered, promote it |
Worked example: six mains, one month
A neighborhood restaurant sold 1,200 main-course plates last month across six mains.
| Dish | Plates sold | Menu price | Plate cost | Margin per plate | Total margin | Share of plates |
|---|---|---|---|---|---|---|
| Cheeseburger | 400 | $15 | $5 | $10 | $4,000 | 33.3% |
| Fish tacos | 300 | $18 | $5 | $13 | $3,900 | 25.0% |
| Salmon bowl | 200 | $24 | $10 | $14 | $2,800 | 16.7% |
| Steak frites | 120 | $34 | $16 | $18 | $2,160 | 10.0% |
| Mushroom risotto | 100 | $19 | $10 | $9 | $900 | 8.3% |
| Shrimp pasta | 80 | $20 | $12 | $8 | $640 | 6.7% |
| Total | 1,200 | $14,400 | 100% |
Step 1: the popular cutoff. An even share is 1,200 ÷ 6 = 200 plates. 70% of 200 is 140 plates, which is 11.7% of the total. The burger, the tacos and the salmon bowl clear 140. Steak frites misses by 20 plates. The risotto and the pasta miss by more.
Step 2: the average margin. $14,400 ÷ 1,200 plates = $12.00 a plate. The tacos ($13), the salmon bowl ($14) and the steak ($18) are at or above it. The burger ($10), the risotto ($9) and the pasta ($8) fall below it.
Step 3: put the two together.
| Dish | Popular (140+ plates)? | Margin $12 or more? | Group |
|---|---|---|---|
| Cheeseburger | Yes | No | Plowhorse |
| Fish tacos | Yes | Yes | Star |
| Salmon bowl | Yes | Yes | Star |
| Steak frites | No | Yes | Puzzle |
| Mushroom risotto | No | No | Dog |
| Shrimp pasta | No | No | Dog |
Now look at food cost percentages. The salmon bowl runs at 42% and the steak at 47%, so a review based on food cost % alone would flag both. On this matrix they are a Star and a Puzzle, because each plate leaves $14 and $18. The burger runs at 33% and looks fine on food cost %. It is the dish with the most money to gain.
What to do with each group
Stars: protect them (fish tacos, salmon bowl)
Keep the recipe, the portion and the menu spot as they are. Watch their ingredient prices closely. If salmon goes up by $1 a portion, the bowl makes $200 less a month. Stars sell without help, so leave them out of discounts.
Plowhorses: cut their cost (cheeseburger)
A Plowhorse sells a lot, so a small change per plate adds up fast. Take $0.50 off the burger's plate cost and it makes $200 more a month at 400 plates. Start with what your other vendors charge for the same beef. Then weigh a few fries portions. One extra ounce on each of 400 plates is 25 pounds of fries a month.
Price is the other lever. A $1 increase on 400 burgers is $400 a month if the plate count holds. Raise it in small steps and watch the count.
Puzzles: promote them (steak frites)
The steak leaves you more per plate than anything else on this menu. Twenty-five more steaks a month would add $450 of margin and move it into the Star box. Move it to the top of its section or put a box around it, and ask servers to mention it. If the price is what stops people, try a smaller cut at a lower price. Re-check its plate cost before you push it, so the margin you promote is real.
Dogs: rework or drop them (risotto, shrimp pasta)
Ask why the dish is on the menu. If the shrimp pasta stays out of habit, take it off and use the line for something new. If shrimp prices rose since you last costed it, a different size count or vendor may fix the margin.
Some Dogs earn their place another way. If the risotto is your only vegetarian main, dropping it can lose you the table of four that came in with one vegetarian. Rework it instead. Take $2 off the plate with a cheaper mushroom mix and finish, add $1 to the price, and it makes $12 a plate, right at the average.
Mistakes that put dishes in the wrong box
Old plate costs, or plate costs without modifiers
Every margin above is only as good as its plate cost. A plate cost built from last spring's invoices can put a dish in the wrong group. Re-cost from your latest invoices before each review.
Modifiers count too. Say half your burgers go out with bacon, charged at $2 and costing you $1.40, and a free swap to sweet potato fries adds $0.60 of food. The burger's real margin is then different from the recipe card. Count what each modifier added to the price and to the cost.
Sides rung at $0
Many POS setups ring the fries or side salad that comes with a main as a $0 line, so the kitchen gets a ticket for it. Those lines have a cost and no price. Put them in the sheet as dishes and every one of them lands in the Dog box. They have no margin of their own. Leave them out, and add their cost to the plate cost of the main they went out with.
Comparing different periods or seasons
Use at least four weeks so one slow week does not decide the answer. A summer salad will look like a Dog in January, and a holiday week or a big private party will skew the counts. When you compare this review with the last one, use the same length of time and the same time of year.
Template: run it in a spreadsheet
One menu section per sheet, one dish per row. The formulas assume six dishes in rows 2 to 7 under a header row; change the ranges to fit.
| Column | What goes in it |
|---|---|
| A Dish | The name as it appears on your POS |
| B Plates sold | From your POS item sales report |
| C Price paid | Net sales for the dish ÷ plates sold |
| D Plate cost | From your recipe costing, at current prices, with modifiers |
| E Margin per plate | =C2-D2 |
| F Total margin | =B2*E2 |
| G Share of plates | =B2/SUM($B$2:$B$7) |
| H Popular? | =G2>=0.7/COUNT($B$2:$B$7) |
| I Profitable? | =E2>=SUM($F$2:$F$7)/SUM($B$2:$B$7) |
| J Group | =IF(AND(H2,I2),"Star",IF(H2,"Plowhorse",IF(I2,"Puzzle","Dog"))) |
Before you trust the result, check these:
- Every plate cost comes from your latest invoices.
- Modifiers are counted in both price and cost.
- Sides rung at $0 are left out, and their cost is added to the main.
- The sheet holds one menu section only.
- The period is at least four weeks long and matches the season of your last review.
How RestaurantMate gives you these numbers
RestaurantMate is a digital restaurant manager for restaurants and restaurant groups. It pulls in your vendor invoices and prices your recipes from what you paid. AI never guesses a price. Sales come from your POS: Toast and SpotOn today, and we add your POS on request.
Open COGS (what your food costs you), then the Menu tab and Items, and pick a date range at the top. Each item shows Units, which is plates sold, and Contribution, which is total margin. Click an item to see its Margin per item and each recipe line with its price and where that price came from. The item window also shows the modifiers sold with it and the sides that went out at $0, so you can see what they add to the cost.
The COGS report behind that table also sorts each fully costed item into Star, Plowhorse, Puzzle or Dog with the two tests from this guide, so you can ask your agent in the app "Which dishes were Plowhorses last month?" Items that sell for under $1 on average get no group, since those are sides included with another dish. An item with an unpriced recipe line gets no group either, because a missing price makes its margin look bigger than it is. The Show filter (Missing prices, No recipe cost) lists those items so you can fix them.
RestaurantMate differs from the textbook in one way. It compares each item with everything the location sold in the range, across all sections. To run one section at a time, use Export CSV on the Items table and paste those rows into the template above.
RestaurantMate is free for 60 days, then $99 a month per location, plus a $300 refundable deposit for the RestaurantMate device. No card required to start.
Get started · Try the live demo
Common questions
Should I drop every Dog?
Only the ones that do nothing else for you. A Dog that brings in a guest who would otherwise eat elsewhere, or that uses up an ingredient you already stock for a Star, can be worth reworking instead.
How often should I run it?
Before each menu change, and after a big price move on a main ingredient. Use the same period length each time so the results compare.
Sources
- Michael L. Kasavana and Donald I. Smith, Menu Engineering: A Practical Guide to Menu Analysis, Hospitality Publications, 1982. Book details as listed on Wikipedia, "Menu engineering", as of 2026-10-09.
- Michael L. Kasavana, "The Power of Menu Engineering, Part Two", American Hotel & Lodging Educational Institute, May 14, 2025, as of 2026-10-09. Gives the 70% of an even share popularity rule and the average contribution margin as total menu margin ÷ items sold.