Modules · Demand planning

A planner’s day, on one surface

The demand module is the platform’s first application. Here is the day it is built around: the morning worklist, a verdict in one gesture, a number that explains itself, a policy set once at the level you choose, and a model contest for every series.

  1. 01The worklist
  2. 02The verdict
  3. 03Explain
  4. 04The policy
  5. 05The contest

The surface

Queue on the left. History and forecast in the centre. The moves you can make on the right. One screen, so the evidence sits beside the action.

The Demand Workbench’s three panes: the exception worklist on the left, the history-and-forecast grid in the centre, and the actions rail on the right.The Demand Workbench’s three panes: the exception worklist on the left, the history-and-forecast grid in the centre, and the actions rail on the right.
The Demand Workbench’s three panes: the exception worklist on the left, the history-and-forecast grid in the centre, and the actions rail on the right.The Demand Workbench’s three panes: the exception worklist on the left, the history-and-forecast grid in the centre, and the actions rail on the right.
Demand WorkbenchWhat needs a look, the history and forecast behind it, and the moves you can make: one surface.Real screens on a demo world; the brands are fictional.

01 · The worklist

The morning starts with what needs a look, worst first.

The queue ranks the series that need a decision and says why: a spike, a stockout, a declared event, a model that lost its margin. So the day begins with the exceptions, not with a spreadsheet.

Every row carries its reason and its verbs, so a planner never leaves the queue to act on it. The queue hears the page filter exactly the way the grid beside it does, one filter grammar, not a private one, so “my categories, this quarter, the North region” narrows the worklist and the worksheet together.

The ranking is data, not a rendering: the same measures that put a series at the top are the ones the accuracy spine grades at the end of the cycle.

The workbench worklist: series ranked by what needs a decision, worst first, each with its reason.The workbench worklist: series ranked by what needs a decision, worst first, each with its reason.
Demand WorkbenchThe worklist ranks what needs a decision and says why, worst first.
The review queue: the series that need a look, worst first, with the reason and the verdict verbs beside each one.The review queue: the series that need a look, worst first, with the reason and the verdict verbs beside each one.
The review queue: the series that need a look, worst first, with the reason and the verdict verbs beside each one.The review queue: the series that need a look, worst first, with the reason and the verdict verbs beside each one.
Review queueThe review queue: the series that need a look, worst first, with the reason and the verbs beside each.

02 · The verdict

One gesture, and the whole plan hears you.

Keep it, correct it, mask it, name it as an event, adjust it or approve it, each a single click with the evidence sitting beside it.

The six verdict verbs on a review-queue row: keep, correct, mask, adjust, declare an event, approve.The six verdict verbs on a review-queue row: keep, correct, mask, adjust, declare an event, approve.
Review queueKeep, correct, mask, adjust, declare an event or approve: the planner’s verbs on every row.

The verdict is stored as data, not as a note. It lands as measures on the history itself, through the ordinary edit door, with a governed reason beside it and a vintage stamp that makes leakage-free replay possible, so the cleansing engine, the model contest and the next cycle all read it. Judgement stops being an override the system fights and becomes an input the system uses.

Declare event is the verb the category forgets: an observed spike becomes a named, dated, reusable event rather than a number that gets erased. Any verdict in at most two gestures, on one surface. That is the bar the module is built to.

The disposition rail beside the series canvas: cleanse, re-forecast, override the model or save the selection as a set, each a governed run.The disposition rail beside the series canvas: cleanse, re-forecast, override the model or save the selection as a set, each a governed run.
Demand WorkbenchAct on the selection: cleanse, re-forecast, override the model or save the set, each a governed run.

03 · Explain

Every number can be asked why.

Right-click a forecast and see what built it: the base level, each driver’s push up or down, the model that won and the margin it won by, and what changed since the last cycle.

The cell’s own right-click menu over a forecast: explain this cell, what built this number, what changed here.The cell’s own right-click menu over a forecast: explain this cell, what built this number, what changed here.
What built this number?The cell’s own menu: the model’s words, the driver waterfall and the lineage, one click away.

The explanation is of the number you clicked, always, declared by the rule that authored it, never inferred. Where the arithmetic is exact we draw the waterfall. Where it is a proportional share we say so in words instead of drawing one that would lie, and we tell you how much of an aggregate the breakdown actually stands on.

The same permissions that wall the grid wall the explanation, so it is never a side channel around who may see what.

What built this number: the base level and each driver’s signed contribution for one forecast cell, read at the cell’s own grain.What built this number: the base level and each driver’s signed contribution for one forecast cell, read at the cell’s own grain.
What built this number: the base level and each driver’s signed contribution for one forecast cell, read at the cell’s own grain.What built this number: the base level and each driver’s signed contribution for one forecast cell, read at the cell’s own grain.
What built this number?What built this number: the base and each driver’s signed contribution, read at the cell’s own grain.

We let the model say no.

Every driver you switch on (weather, price, promotion, events) is backtested against the series it claims to explain. If it does not improve the forecast, it does not get a seat, and the page says so in plain words with the score beside it. Every driver family walks one ladder: declared, materialised, fed, judged, and the catalog never claims a driver works; the contest measures whether it earned its seat, per series.

A tool that only ever agrees with itself is not evidence. A refusal is.

0 of 2,310

series on which weather earned a seat: real weather, loaded through the connector plane and put in front of the models

paired champion score 0.5093 → 0.5104; a demo world whose demand was generated without weather: the platform measured it and said no

The seat verdict census: how many driver families earned their seat, were judged and refused, were never contested, are not declared yet or are not on this tenant, and how many series carry a verdict.The seat verdict census: how many driver families earned their seat, were judged and refused, were never contested, are not declared yet or are not on this tenant, and how many series carry a verdict.
Did this signal earn its seat?The census: earned, refused, never contested, not declared, not on this tenant, and how many series carry a verdict.
The judged-and-refused rows: the driver families the models were given and turned down, each stated as a verdict in words.The judged-and-refused rows: the driver families the models were given and turned down, each stated as a verdict in words.
The judged-and-refused rows: the driver families the models were given and turned down, each stated as a verdict in words.The judged-and-refused rows: the driver families the models were given and turned down, each stated as a verdict in words.
Did this signal earn its seat?A refusal is a headline, not a blank: the families the models judged and turned down.
Did this signal earn its seat: every driver family judged, with the refusals stated by name and the score beside each verdict.Did this signal earn its seat: every driver family judged, with the refusals stated by name and the score beside each verdict.
Did this signal earn its seat: every driver family judged, with the refusals stated by name and the score beside each verdict.Did this signal earn its seat: every driver family judged, with the refusals stated by name and the score beside each verdict.
Did this signal earn its seat?Did this signal earn its seat: every input family judged, with the refusals stated by name.

04 · The policy

Every setting is yours, at the level you pick.

Cleansing, outlier treatment, stockout handling, launch curves, phase-out fences: each is a switch with a dial, pinned at a category, a region, a channel or a single item.

Set it once; everything underneath inherits it; one item can differ, on the record with a reason. The layers resolve in a fixed order: package default, tenant default, segment, series pin, and the page tells you which one a value is riding rather than hiding it.

In the module, the policies sit on a rail beside the plan. Each setting is a switch with the stages it runs at, a badge that says whether it was set here, inherited from above, or is a package default, an honest marker where no engine exists yet, and a line that says what a change here reaches. Then one verb,Apply at this level, with a dry-run preview of the scope, the overlaps and the reason the layer demands, before anything commits. Stop applying this here undoes it.

Turning a setting off doesn’t hide it. The engine measurably skips it.

14ms

the same lifecycle run with a setting off

169ms

with it on, off provably skips

single-node setup; measured in our lab, on our own test data

A policy family’s options in the Policy Studio: every option a governed value with its own plain-language meaning.A policy family’s options in the Policy Studio: every option a governed value with its own plain-language meaning.
Policy StudioEvery option is a governed value with its own plain-language meaning.
The Policy Studio: a policy family’s named setups, each option typed and described, riding a default until it is set.The Policy Studio: a policy family’s named setups, each option typed and described, riding a default until it is set.
The Policy Studio: a policy family’s named setups, each option typed and described, riding a default until it is set.The Policy Studio: a policy family’s named setups, each option typed and described, riding a default until it is set.
Policy StudioPolicy Studio: a family’s named setups, each option typed, described and riding a default until set.

05 · The contest

A contest for every series, every cycle.

Simple methods, classical statistics, intermittent-demand methods and machine learning all compete on each series’ own history, scored on the same accuracy definition used everywhere else in the product.

The model contest scoreboard: every method that competed on a series, with error, bias, rank, margin and the reason the champion won.The model contest scoreboard: every method that competed on a series, with error, bias, rank, margin and the reason the champion won.
The model contest scoreboard: every method that competed on a series, with error, bias, rank, margin and the reason the champion won.The model contest scoreboard: every method that competed on a series, with error, bias, rank, margin and the reason the champion won.
Model contestEvery model that competed for every series, with the winner and the runner-up named.

The winner is named on the grid, the scoreboard shows every challenger and the margin, and the ranges (P10 / P50 / P90) come from the model that won, not from a rule of thumb applied afterwards. The scoreboard is ordinary, filterable data: error, bias, rank, holdout, folds, margin, the champion flag and the reason, with the demand pattern’s statistics beside each candidate.

Rerun the contest for a selection from the rail, or pin a model for a series with a governed reason. The override is data too, and the next cycle reads it.

36,220

series classified in one full-portfolio contest, run as a governed job

108.9min

to judge 31,151 series and publish 800k forecast cells , 1,090 skipped honestly, 0 refused

a demo tenant; the run’s accuracy figure is not a claim

The model contest scoreboard rows: each method that competed on a series, with its rank, its error and the margin to the champion.The model contest scoreboard rows: each method that competed on a series, with its rank, its error and the margin to the champion.
The model contest scoreboard rows: each method that competed on a series, with its rank, its error and the margin to the champion.The model contest scoreboard rows: each method that competed on a series, with its rank, its error and the margin to the champion.
Model contestThe scoreboard rows: method, rank and error for each entrant.

After the day

It will tell you when it was wrong. It will tell you when you were.

Accuracy, bias and forecast value added are computed every cycle at whatever level you pivot to, from one definition used identically on every screen. If a manual adjustment reduced accuracy, that shows up too, quietly, with the number.

The accuracy staircase: each published vintage’s frozen promise against what happened, by lag, coloured by how far ahead the promise was made.The accuracy staircase: each published vintage’s frozen promise against what happened, by lag, coloured by how far ahead the promise was made.
Accuracy staircaseThe vintage wall coloured by how far ahead the promise was made: accuracy at every lag, over frozen cycles.
Why it moved: the plan-movement waterfall from the earlier vintage to this one: overrides, new and dropped coverage, unattributed movement, net change.Why it moved: the plan-movement waterfall from the earlier vintage to this one: overrides, new and dropped coverage, unattributed movement, net change.
Why it movedThe plan-movement waterfall: overrides, new and dropped coverage, unattributed movement, net change.

How the platform grades its own work

Consensus and what-if

One filter, one room, and a what-if that costs nothing to start.

The consensus plan narrows the chart and the worksheet together from one shared filter. A scenario stores only the cells you changed, so trying something is instant, and so is throwing it away.

The consensus plan: column funnels and a shared filter panel narrowing the chart and the worksheet together.The consensus plan: column funnels and a shared filter panel narrowing the chart and the worksheet together.
The consensus plan: column funnels and a shared filter panel narrowing the chart and the worksheet together.The consensus plan: column funnels and a shared filter panel narrowing the chart and the worksheet together.
Consensus planOne shared filter narrows the chart and the worksheet together. Pick a family, everything follows.

Walk the day on your own numbers

Bring your history and your hierarchies. We load them, run the contest, and walk the worklist, the verdict and the explanation with you.

Request a demo

a working demo on your data · no commitment