M cenaly.ru
⚙️ Features

🍽️ Menu Engineering

Kasavana & Smith matrix: stars, plowhorses, puzzles and dogs with a recommendation per dish

Documentation

Menu engineering

Menu engineering answers a question revenue reports never show: what to do with a specific dish. One dish is ordered often but barely feeds the business. Another has an excellent margin but nobody notices it on the menu. A third does neither and simply takes up a line.

Open Admin Panel → Menu → Statistics (admin.cenaly.ru/menu/statistics) and switch to the "Menu engineering" tab.

The method is the classic Kasavana & Smith matrix (1982): two dimensions, four quadrants, one recommendation per quadrant.


How the quadrants are calculated#

Every dish is compared inside its own menu category, not against the whole menu: comparing a dessert with a main course is meaningless — they have different prices and different order frequencies. A "Whole menu" toggle lets you look at the cross-category view as well.

Popularity threshold. If demand were even, each of the N dishes sold in a category would take a 1/N share. A dish counts as popular if it reaches at least 70 % of that bar — i.e. its share in units is ≥ 0.7 × (1/N). That is the method's canonical factor.

Margin threshold. A dish's margin here is its unit contribution margin: average selling price over the period minus portion cost. The bar is the category's quantity-weighted average margin, not a plain arithmetic mean: otherwise one expensive dish sold twice would raise the bar for the whole category.

Portion cost comes from the dish recipe (components × purchase prices — see Inventory).

Dishes without a complete portion cost do not get a quadrant. If there's no recipe, or some ingredients have no purchase price, the dish is flagged "no cost data" and stays out of the matrix. This is deliberate: a "remove from the menu" decision based on an invented margin is far too expensive.

Besides the table, the tab draws a scatter plot: popularity on one axis, unit margin on the other, both thresholds shown as dashed lines. You see not only which quadrant a dish is in, but how far it is from the border.


The four quadrants#

Quadrant Popularity Margin Recommendation
Stars high high Keep it featured — don't touch quality or portion size, put it at the top of its section and into recommendations
🐴 Plowhorses high low Raise the price or cut the cost — guests love it, so it will absorb a modest price increase; the alternative is reworking the recipe
Puzzles low high Move it up the menu — rename it, add a photo, suggest it in the room and at the till; demand is limited by visibility, not by the dish
🗑 Dogs low low Take it off the menu — nobody orders it and it doesn't feed you, while its ingredients still occupy stock

The "What to do" column is filled in automatically from the quadrant — it is a fixed rule of the method, not an AI suggestion.

Rows inside a category are sorted by total margin over the period (what actually feeds you comes first), and categories by revenue.


Margin by channel#

A dish with an average in-house margin can go negative in an aggregator that takes 30 %. That's why there is a "Margin by channel" block under the matrix:

Column What it is
Channel own channel, Wolt, Glovo, Yandex Eda and so on
Gross channel revenue before the platform's cut
Commission the cut: a percentage of revenue plus the allocated share of the per-order fixed fee
Net what actually reaches your till
Margin net minus the cost of goods sold

Commission rates are set per location + channel pair in the location's integrations (see Finance). Until they are filled in, commission counts as zero and net equals gross — an optimistic picture.

Channel cost is computed only from dishes with a complete recipe, while revenue counts all of them; how many of the channel's dishes are left without cost is shown as a separate number.


What the matrix needs to appear#

  1. Sales for the period. The period uses the same selector as the statistics tab: 7 / 30 / 90 days, 12 months, "All time".
  2. Dish recipes with purchase prices filled in for the ingredients — without them a dish has no cost and therefore no quadrant.
  3. Channel commissions — only for the "Margin by channel" block; the matrix itself works without them.

If not a single dish has a complete cost, the tab says so plainly instead of showing an empty table.

The ⇩ CSV button exports the whole matrix — handy for discussing the menu with your chef in a spreadsheet or attaching it to a price-review record.


Limitations#

  • Without cost of goods the matrix cannot be built. You need recipe cards with purchase prices; if not a single item has a full cost, the view says so honestly instead of showing an empty table.
  • On a short period the quadrants are unstable. A couple of sales move a dish from "puzzles" to "stars" and back — look at 30 or 90 days.
  • Channel commissions are estimated rates from your settings, not the marketplaces' actual deductions; the "Margin by channel" block is only as accurate as those rates.
  • There is no single metric glossary yet — revenue in Finance, in Statistics and at the POS may be computed differently, so compare identical periods and identical slices.
  • The section is computed on the analytics database of the AWS contour — on the Russian brand sales statistics falls back to computing from orders.

Troubleshooting#

The view is empty. There are no sales for the period, or not a single item has a full cost of goods.

A dish is missing from the matrix. It has no recipe card with ingredient prices, so it has no margin — there is nothing to measure.

A quadrant looks implausible. Check the period: 7 days is too small a sample. And check ingredient prices — a stale purchase price distorts margin more than anything else.

The numbers do not match the Finance section. Compare the period and the slice: there is no single "truth about the number" between sections yet.


  • Menu statistics — sales per dish, ABC, trend and "frequently bought together"
  • Inventory — recipes and purchase prices behind the portion cost
  • Finance — channel commissions and net margin for the whole venue
  • Demand forecast — how many of this dish will sell tomorrow

FAQ#

Why is a dish in no quadrant at all?#

Either it had no sales in the selected period, or it has no complete portion cost: the recipe is missing, or some ingredients have no purchase price. In both cases the dish stays in the table with a flag but without a quadrant.

Can I change the 70 % popularity threshold?#

Not in the interface — the canonical factor of the method is used. What you can change is the grouping: compare dishes inside a category (default) or across the whole menu.

The matrix says to remove a dish, but we need it on the menu "for the range". What now?#

The recommendation is a consequence of two numbers, not a verdict. A dish that doesn't feed you but keeps guests coming (a kids' item, a vegetarian alternative, "that one dish" for regulars) can stay on the menu deliberately. The matrix is useful here precisely because it shows the price of that decision.

Why does the channel margin differ from the matrix margin?#

The matrix computes margin from the gross selling price; the channel block computes it from revenue after the platform's cut. The difference between the two is the price of the channel.