File: 2026.10.26 - Lumenwire Audio - 02 KPI Calculation Pack.md
Lumenwire Audio: KPI Calculation Pack
Stage 2 (KPI Development), Kewpie. Version 1.1, 26-Oct-26. Built from Business Requirements v1.1 (Adam approved Stage 2 and the eight changes to the targets, thresholds and measures on 26-Oct-26). Version 1.0 was built on Business Requirements v1.0.
Data label: Sample data. Synthetic data for the test run. Latest complete month: September 2026 (the data ends 30 September 2026). Financial year runs July to June.
Re-run: 03 - Working Files/02_calculations.py reads the 18 CSVs and writes 02_results.json. 02_build_pack.py turns that into this pack, the challenge notes and the Kewpie columns of spec.json. Every number and every root cause test below comes from those two scripts, so any figure can be re-run and checked.
Two things Gary flagged, and where they landed
- Reps are paid per design win with no clawback: the design-win counts sit under the conversion rate, and the Root Cause Findings test whether the bonus changed anything (it changed volume and deal size, not the shipping rate so far).
- Forecast data mixes units: 12 of 84 snapshot rows are in AUD thousands (FY24-Q1, FY24-Q2, FY24-Q3, FY24-Q4, Finance only). All are converted to AUD before any calculation. Left unconverted, Finance's first forecast would be out by 99.9%.
Pending sign-off, built anyway. New devices activated (K2) is pending the Head of Platform Engineering. Forecast accuracy (K5) is pending the CFO. Both are built and tested below and carry that flag. Neither goes on page one until the person named has given their view.
1. Summary: the Top 5
| Top 5 KPI | Baseline (period) | Target | Pace needed | Run rate (last 3 periods) | Status |
|---|---|---|---|---|---|
| Total revenue, last 12 months, against the path to A$115m (K1) | A$80.5m in the 12 months to Sep-26, against a path of A$84.9m (-5.1%) | A$115m by Jun-28 | A$1.64m a month more | -A$0.02m a month | Red |
| New devices activated in the field, last 12 months against the year before (K2) | -1.4% (2,492,460 devices against 2,528,350); last quarter alone +4.9% | At least +5% by Jun-27 | +0.71 pts a month | +0.63 pts a month | Red (pending Head of Platform Engineering) |
| Software revenue growth without one-off large licences, last 12 months against the year before (K3) | -15.6% (A$17.7m against A$21.0m, leaving out the A$7.4m licence of Mar-26); including it: +19.7% | 0% or more by Jun-27 | +1.7 pts a month | -4.7 pts a month | Red |
| Design wins that ship, as a % of design wins old enough to have shipped (K4) | 31.5% (672 of 2,131 design wins at least 18 months old) | 35% by Jun-27 | +0.39 pts a month | +0.08 pts a month | Amber |
| Forecast accuracy: actual quarterly revenue against the forecast at the start of the quarter (K5) | FY27-Q1: Finance -17.2%, Sales +25.6% (4-quarter average miss: Finance 23.2%, Sales 34.3%) | Within 10% by Jun-27 | Finance -2.4 pts a quarter, Sales -5.2 pts a quarter | Finance -11.3 pts a quarter (Sales -4.5 pts) | Amber for Finance, Red for Sales (pending CFO) |
All five baselines are Observed Fact on the Sample data, except Design wins that ship (K4), which is a Working Hypothesis: 33% of the design wins the CRM knows about have no stage dates and cannot be counted (above the 5% rule).
Reading the pace column. Total revenue (K1) is flat at about A$80.5m, so it needs A$1.64m a month more to reach A$115m. Software growth (K3) is measured without the Mar-26 licence, so it is -15.6% and needs +1.7 pts a month to get back to 0%, while the run rate is -4.7 pts a month. Design wins that ship (K4) is 3.5 pts short of its 35% target: it needs +0.39 pts a month against a run rate of +0.08 pts.
What the data says about the story Marcus told
| What Marcus said | What the data shows | Verdict |
|---|---|---|
| Revenue fell from A$118.4m to A$80.6m | Ledger A$118.4m and A$80.6m; invoices reconcile to the ledger to the cent in every year | Confirmed (Observed Fact) |
| Software grew 38% to A$25.7m | A$25.7m, +38.2%. But A$7.4m of it is one licence signed on 2026-03-27: without it FY26 software is -1.6% | Number confirmed; "growth" is one deal (Observed Fact) |
| Gross margin went from 71% to 77% | 71.0% and 77.0%. Without the licence, FY26 is 74.7% (assuming the licence carries no cost of sales) | Number confirmed; the gain is mostly that licence (Strong Inference) |
| A record 1,180 design wins | 1,180 in FY26, confirmed. 31.5% of those old enough have shipped, not 80% | Count confirmed; the 80% belief is not (Observed Fact on dated records) |
| Hardware fell because of an industry soft patch | End-customer installs fell 3.3% in FY26 (A$1.8m of a A$49.8m hardware volume fall). OEMs bought 47% fewer units | Mostly not demand: OEMs stopped buying ahead of installs (Strong Inference) |
| Q1 FY27 about A$19m | A$19.4m (plan A$22.4m) | Confirmed; -13.3% against plan |
2. The Top 5 and their sub-KPIs
Each measure below is Confirmed (Gary's draft ran as written) or Corrected (changed, with the Before and After in section 5, and logged as a challenge note where it affects the target or the data).
Total revenue, last 12 months, against the path to A$115m (K1)
Measure status: Corrected (hardware and other revenue split). Objective: Get revenue back to A$115m within two years (O1). Owner: CEO.
- Plain English: Revenue over the last 12 months, shown each month against a straight line from FY26 actual (A$80.6m) to A$115m by June 2028. Split hardware and software.
- Calculation:
R12M(m) = -1 x SUM(gl_monthly.amount_aud)over the 12 months to month m, for account codes 4000, 4050, 4100, 4110, 4200, 4210.path(m) = 80.6m + (115m - 80.6m) x months since Jun-26 / 24.gap = R12M - path. - Sources and why:
gl_monthly.amount_aud,period,account_codeandgl_accounts.pl_group: the ledger Marcus trusts and the board pack uses. Cross-check:erp_invoice_lines.net_amount_audbyproduct_familyreconciles to the ledger by financial year and family, largest difference A$0.00. - Grain: month by account (summed over cost centres).
- Filters: pl_group 'revenue' (6 accounts); credits flipped to positive; volume rebates (4050, debit) reduce revenue and freight recovered (4210) is included. This reproduces A$118.4m (FY25) and A$80.6m (FY26) exactly. Hardware = 4000 + 4050. Software = 4100 + 4110. Other = 4200 + 4210 (developer kits and freight).
- Baseline: A$80.54m for the 12 months to Sep-26 (hardware A$54.8m, software A$25.1m). Path at Sep-26: A$84.9m. Gap -A$4.36m (-5.14%), just beyond the 5% Red line. Observed Fact. Peak was A$122.1m in 2024-06.
- Pace needed: (A$115m - A$80.54m) / 21 months to Jun-28 = A$1.64m a month. The straight-line path itself rises A$1.43m a month. Run rate over the last 3 months: -A$0.02m a month. Off pace.
- Counter-metric: Gross margin %, last 12 months (K3.2), baseline 76.5%. Revenue can be pulled forward with volume rebates: in FY25, 46% of hardware revenue landed in the four quarter-end months (rebates are only ever booked in those months), against 33% if spread evenly. Watch the margin and the rebate rate (6.7% of hardware sales in FY25, 4.6% in FY26).
- Notes: The R12M contains the A$7.4m licence of Mar-26 (9% of the figure). If the rest of FY27 repeats last year month by month without that licence, the 12 months to Jun-27 would be about A$73.1m, against a path of A$97.8m (an illustration, not a forecast). Hardware has been flat for five quarters (FY26-Q1 to FY27-Q1: A$12.9m, A$14.5m, A$12.6m, A$14.4m, A$13.4m). FY27-Q1 is +3.9% on the year before, the first quarter that is not a fall. No unmapped accounts, no duplicate ledger rows.
Sub-KPIs under Total revenue: none
Gary's list has no sub-KPI under K1. The split by hardware and software is shown inside K1, and the reasons for the movement are in the Root Cause Findings.
New devices activated in the field, last 12 months against the year before (K2)
Measure status: Corrected (repeat serials and OEM backfill). Objective: Know whether we're still growing underneath the fall (O1.1). Owner: VP Sales. Pending sign-off: Head of Platform Engineering (Tomasz Wierzbicki).
- Plain English: Devices that joined a network for the first time in the last 12 months, against the 12 months before.
- Calculation: keep the earliest
first_seen_tsperdevice_serial;activations(R12M) = 10 x COUNT(device_serial)where that first date is in the 12 months to Sep-26;growth = this / prior 12 months - 1. The table is a 1-in-10 sample, so counts are multiplied by 10 (growth % is unaffected). - Sources and why:
device_activations.device_serial,first_seen_ts(engineering telemetry, the source Marcus trusts most);oem_id,country_from_ip,module_skufor the splits. - Grain: device (first activation).
- Filters: one row per serial (5,040 repeat rows dropped, 0.42% of rows); beta-firmware rows are all from 2021-22 and none fall in the window (0); data starts Jan-21; 107,210 rows have no
oem_id(8.9%): 22,024 are recovered throughmanufacturer_code(each code maps to one OEM) and 85,186 stay unassigned. This affects only the OEM split, not the headline. - Baseline: -1.4% for the 12 months to Sep-26 (2,492,460 against 2,528,350). The year before was +3.0%. Observed Fact on the sample. Last quarter alone (Jul to Sep 26 against the same months of 2025): +4.9%.
- Pace needed: (+5.0% - (-1.4%)) / 9 months to Jun-27 = +0.71 pts a month. Run rate: +0.63 pts a month. Slightly off pace, and closing.
- Counter-metric: Share of activations that are repeat serials (a device re-joining counted as new), baseline 0.51% in the 12 months to Sep-26. It guards against re-flashed or test devices inflating the count.
- Notes: Coverage is the open question (Q-4): the sample cannot say what share of installed devices phone home. Telemetry is a clue for end-customer demand, not yet proof. In the data, units invoiced per device activated were 1.91 in Jan to Jun 25 and 1.04 since Jul-25 (see the Root Cause Findings for what that implies). Duplicate-serial share is steady (0.47% before the dip, 0.53% during).
Sub-KPI under New devices activated: Months of stock cover at the OEMs that report (K2.1)
Measure status: Corrected (divisor chosen: units invoiced; reels, free-text names, the number of reporters). Owner: VP Sales. Pending the Head of Platform Engineering and VP Sales.
- Plain English: Units of our parts the reporting OEMs hold, divided by the average monthly units we invoiced to those same OEMs in the same quarter. Units on hand are shown alongside.
- Calculation:
cover(q) = SUM(units on hand at the OEMs that reported in q) / (SUM(qty invoiced to those OEMs in the 3 months of q) / 3), whereunits = units_on_hand x 500for reel rows, otherwiseunits_on_hand. Calendar quarters. - Divisor: units invoiced, not units activated. Same unit as the stock (parts, not finished devices). Full scale, with an OEM on every hardware line, where activations are a 1-in-10 sample with 7% of devices unassigned to an OEM. Stock is also what OEMs bought from us, so cover against purchases says how long they could stop buying. For comparison, units activated give 9.9 months in 2026-Q3 against 10.9 on invoices.
- Sources and why:
oem_inventory_reports.oem_name,quarter,sku_or_description,units_on_hand(Sales; the only stock view we have);oem_master.oem_nameto match names;erp_invoice_lines.qty,oem_id,product_family(chip, module, card) for the divisor. - Grain: OEM by quarter.
- Filters: 235 spellings of OEM names clean up to 35 OEMs, all matched to
oem_master. 88 rows are reels of 500 (converted). 229 rows are finished goods containing our parts: kept, noted. Only the OEMs that reported in the quarter go into both the stock and the divisor, so a quarter with fewer reporters is not flattered. - Baseline: 10.9 months in 2026-Q3 (841,883 units at 28 OEMs, buying 77,005 a month). Peak 15.4 months in 2025-Q3. Observed Fact for the reporters. Status: Red (6 months green, over 9 months red). Gary's draft quoted 9.3 months, my first estimate using every OEM that ever reported; the quarter's own reporters give 10.9.
- Pace needed: (6 - 10.9) / 3 quarters to Jun-27 = -1.6 months a quarter. Run rate (last 3 quarters): -0.7 months a quarter. Off pace, though improving.
- Counter-metric: not required for a sub-KPI. Reporting is voluntary and uneven (22 to 31 OEMs a quarter), so always show how many OEMs reported.
- Notes: Units on hand alone: 841,883 in 2026-Q3, 45% below the 2025-Q2 peak like for like. Cover fell because stock fell and purchases stayed low. Coverage is 46% of FY26 hardware revenue. Notes on the reports vary (includes goods in transit: 163, excludes Mexico plant: 162, estimate: 157, as at month end: 123), so definitions differ by OEM.
Software revenue growth without one-off large licences, last 12 months against the year before (K3)
Measure status: Corrected (the one-off exclusion is now in the formula). Objective: Keep software growing, with gross margin holding up (O2). Owner: CEO.
- Plain English: Software revenue over the last 12 months divided by the 12 months before, minus 1, leaving out any single licence worth more than A$1m (threshold to agree with the CFO). Growth including those licences is shown alongside.
- Calculation:
(SUM(software revenue, R12M) - SUM(licences over A$1m started in R12M)) / (SUM(software revenue, prior R12M) - SUM(licences over A$1m started in prior R12M)) - 1. Software revenue =-1 x SUM(gl_monthly.amount_aud)for accounts 4100 and 4110. The licences left out come fromsoftware_licences.contract_value_audbystart_date. - Sources and why:
gl_monthly(the P&L);software_licencesto find the large licences. The licence table equals the ledger within A$27k in any month and A$13k over FY26, so removing a licence at its contract value removes it from the ledger month it was booked in. The ledger books software at the licence start date, for annual subscriptions as well as perpetual licences. - Grain: month by account. Filters: accounts 4100 and 4110; sign flipped; latest complete month Sep-26; single licences over A$1m left out of both windows.
- Baseline: -15.6% for the 12 months to Sep-26 (A$17.7m against A$21.0m). 1 licence over A$1m in the current window (A$7.4m, signed 2026-03-27) and 0 in the prior window. Including it: +19.7%. FY26 on the same rule is -1.6% (headline FY26 growth was +38.2%, reproducing Marcus's 38%). Observed Fact. Status: Red (0% green, -10% red line).
- Pace needed: (0% - (-15.6%)) / 9 months to Jun-27 = +1.7 pts a month. Run rate (last 3 months): -4.7 pts a month (-1.6%, -19.8%, -16.6%, -15.6%). Off pace, and going the wrong way. Software without the licence runs at A$1.48m a month now.
- Counter-metric: Renewal rate of annual subscriptions due in the last 12 months (renewed / (renewed + lapsed)), baseline 88.7% (328 contracts decided; 75 still pending and 88 with no status are left out). Prior 12 months: 88.2%.
- Notes: The licence table has 1,750 of 3,096 contracts with no
oem_id. The A$7.4m contract has 0 seats (the only contract in the table with none), is a perpetual licence, and belongs to Corvane (OEM0079), which was our largest hardware customer in FY25 (A$5.4m) and bought 53% less in FY26. What the contract is, is a question for the CFO. This pack is internal; do not name the customer on the board page (Q-7). The next largest licence in the window is A$864k, so any cut-off between A$0.9m and A$7.4m gives the same answer.
Sub-KPI under Software revenue growth: Share of software revenue from the largest licences (K3.1)
Measure status: Confirmed. Owner: VP Sales.
- Plain English: The largest licence (and the largest five) as a % of all software contract value started in the last 12 months.
- Calculation:
MAX(contract_value_aud) / SUM(contract_value_aud)forsoftware_licenceswithstart_datein the 12 months to Sep-26. Top 5 likewise. - Sources and why:
software_licences.contract_value_aud,start_date,customer_name,licence_type(the contract detail Finance holds). - Grain: licence contract. Filters: start date in the last 12 months (617 contracts). Customer names stay off the board page (Q-7).
- Baseline: largest licence 29.4% of A$25.2m started; top 5 40.5%. Without the Mar-26 licence: largest 4.9%, top 5 18.4%. The year before: 3.9% and 14.6%. In no earlier financial year did the largest licence exceed 6.6%. Observed Fact. Status: Red (10% green line, 20% red line).
- Pace needed: target is below 10% by Jun-27: -19.4 pts. This happens on its own in Mar-27 when the licence leaves the 12-month window, so the figure will not show whether sales behaviour changed. Run rate: not meaningful (one contract).
- Counter-metric: not required for a sub-KPI.
- Notes: Even the second-largest licence is A$864k, so the cliff is one contract.
Sub-KPI under Software revenue growth: Gross margin %, last 12 months (K3.2)
Measure status: Confirmed. Owner: CFO.
- Plain English: (Revenue minus cost of sales) divided by revenue, over the last 12 months.
- Calculation:
(R12M revenue - R12M cost_of_sales) / R12M revenuefromgl_monthlybygl_accounts.pl_group(revenue accounts 4000 to 4210; cost of sales 5000 to 5100). - Sources and why:
gl_monthly,gl_accounts(the P&L). Grain: month by account. Filters: revenue sign flipped; all five cost-of-sales accounts included. - Baseline: 76.5% for the 12 months to Sep-26 (72.3% the 12 months before). FY25 and FY26 reproduce Marcus's 71% and 77%. Observed Fact. Without the Mar-26 licence: 74.1% (assuming the licence carries no cost of sales; at the normal software rate of 4.5% the answer moves by under 0.5 pts). Status: Green (76% green, 74% red line).
- Pace needed: the target is now 76% (the board's FY27 figure), and 76.5% already meets it, so no lift is needed (-0.06 pts a month). Run rate: -0.17 pts a month. Without the Mar-26 licence margin is 74.1%, which reads Amber; the figure falls to that in Mar-27 when the licence leaves the window, unless a similar deal lands.
- Counter-metric: not required for a sub-KPI.
- Notes: Hardware margin is 67.9% (from 66.8%); software 95.5%. Software is 31% of revenue (from 19%). Margin rises because the mix moved to software, not because hardware got cheaper to make.
Design wins that ship, as a % of design wins old enough to have shipped (K4)
Measure status: Corrected (dates required, shipped defined by the date, window kept at 18 months for the CFO and VP Sales to confirm). Objective: Keep design wins turning into shipping products (O3). Owner: VP Sales.
- Plain English: Of the opportunities that reached design win at least 18 months ago, the share that have since reached shipping.
- Calculation:
COUNT(opp WHERE stage_entered_shipping is not blank) / COUNT(opp WHERE stage_entered_design_win <= as-of date - 18 months), among opportunities with a design-win date. Lost after design win counts as not shipped. - Sources and why:
crm_opportunities.stage_entered_design_win,stage_entered_shipping,stage_entered_lost(the CRM is where design wins are logged). Splits:owner,region,oem_id. - Grain: opportunity (one OEM product).
- Filters: design-win date on or before 2025-03-30 (18 months before the data ends). Cohort runs 2023-01-01 to 2025-03-30. 2,932 of 8,990 CRM rows have no stage dates at all (all last edited before 2023): 1,914 of them sit at design win, pre-production or shipping, so they cannot be placed in the cohort. 349 opportunities have a shipping date but no design-win date: counted separately, not in the rate. The 'confirm shipping against invoices' cross-check in the draft cannot be done: the CRM has a product name and the ERP has a SKU, with no key between them.
- Baseline: 31.5% (672 shipped of 2,131). 7.1% were lost and 61.4% (1,308) are neither shipped nor lost. Working Hypothesis, because 33% of design-win-or-later records have no dates. Sensitivity: counting the undated records by their current stage gives 29.7%, so the result holds. Status: Amber (35% green, 30% red line).
- Pace needed: (35% - 31.5%) / 9 months to Jun-27 = +0.39 pts a month. Run rate (the same measure as at Dec-25, Mar-26, Jun-26, Sep-26: 30.8%, 31.4%, 31.7%, 31.5%): +0.08 pts a month. Off pace, but close: the target is 3.5 pts away.
- Counter-metric: Share of design wins later lost, baseline 7.1% of the 18-month cohort. This is the clawback test in numbers: reps are paid A$400 per design win with no clawback, so a rising lost share would show wins logged to earn the bonus.
- Notes: Stage dates start in Jan-23, so there is no history before that. Shipped share by age for the Jan to Jun 2023 design wins (430 opportunities): 12 months 7%, 18 months 21%, 24 months 27%, 36 months 32%, 42 months 32%. The curve levels off near a third, so a longer window would not reach 80%. Q-11 (how long a design win should take to ship) is still open.
Sub-KPI under Design wins that ship: Months from design win to first shipment (K4.1)
Measure status: Corrected (only cohorts old enough). Owner: Head of Platform Engineering.
- Plain English: The median number of months from design win to first shipment, for design wins that shipped, grouped by the quarter of the design win.
- Calculation:
MEDIAN(stage_entered_shipping - stage_entered_design_win)in months (days / 30.44), for cohorts at least 18 months old. Younger cohorts are left out because only the fastest have shipped, which makes their median look short. - Sources and why:
crm_opportunitiesstage dates. Grain: opportunity. Filters: both dates present; grouped by financial quarter of the design win. - Baseline: median 15.0 months (middle half 11.9 to 18.9 months, 672 shipped). Including the young cohorts it would read 14.3. Observed Fact on dated records.
- Pace needed: none: target 'to be agreed after the baseline'. Run rate: -0.6 months per cohort over the last 3 cohorts (shorter, but those cohorts are the least mature, so this is not yet a real improvement).
- Counter-metric: not required for a sub-KPI. Notes: by design-win quarter, the median ranges between 13.3 and 16.2 months.
Sub-KPI under Design wins that ship: Design wins per quarter (K4.2)
Measure status: Confirmed. Owner: VP Sales.
- Plain English: Count of opportunities entering design win in the quarter. Calculation:
COUNT(crm_opportunities WHERE stage_entered_design_win in the financial quarter). - Sources and why:
crm_opportunities.stage_entered_design_win. Grain: opportunity, counted once. Filters: financial quarters (July to June). - Baseline: FY27-Q1 260 design wins; FY26 1,180 (reproduces Marcus's 1,180), FY25 1,020, FY24 950. Observed Fact.
- Pace needed: none: no standalone target (read with Design wins that ship). Run rate: +4.3 design wins a quarter over the last 3 full quarters. Rising count with a flat shipping rate is the pattern to watch.
- Counter-metric: not required for a sub-KPI. Notes: reps earn A$400 per design win, with no clawback (FY25 onward). At 1,180 design wins, that is about A$472k for FY26, assuming every dated win was paid (Strong Inference).
Forecast accuracy: actual quarterly revenue against the forecast at the start of the quarter (K5)
Measure status: Corrected (units, snapshot rule, family mapping, signed error). Objective: Get revenue back to A$115m within two years (O1). Owner: CFO. Pending sign-off: CFO (Priya Anand).
- Plain English: For each quarter, the gap between actual revenue and the forecast made at the start of that quarter, as a % of actual. Shown for Finance and for Sales, with the direction of the miss (positive = forecast too high).
- Calculation:
error = (forecast - actual) / actual; accuracy =ABS(error).forecast= sum of the three product families (hardware, software, other) from the latest snapshot on or before the first day of the quarter, converted to AUD.actual= ledger revenue for the same families and quarter. - Sources and why:
forecast_snapshots.forecast_amount,amount_unit,source,forecast_quarter,snapshot_date,product_family(the forecasts as submitted);gl_monthly.amount_aud(actual). - Grain: quarter by source by product family.
- Filters: 12 rows in AUD thousands multiplied by 1,000 (Finance, FY24 quarters). Snapshots sit 2 to 5 days before each quarter starts, so the rule 'on or before the first day' picks one clean snapshot per quarter. One Sales revision dated after the quarter began (13-Oct-25, FY26-Q2) is ignored; its effect is not tested here. The Sales snapshot for FY25-Q3 is missing (sales_crm FY25-Q3): that quarter is excluded for Sales and counted. Family mapping follows the board plan: hardware = 4000 + 4050, software = 4100 + 4110, other = 4200 + 4210 (the plan reproduces FY26 x 1.15 line by line on this mapping). 13 complete quarters: FY24-Q1 to FY27-Q1.
- Baseline: FY27-Q1 (Jul to Sep 26): Finance forecast A$16.1m, Sales A$24.4m, actual A$19.4m. Errors: Finance -17.2%, Sales +25.6%. Average absolute miss over the last 4 quarters: Finance 23.2%, Sales 34.3%. Over all quarters: Finance 18.7% (2 of 13 quarters within 5%), Sales 22.8% (0 of 12). Observed Fact. Status: Amber for Finance and Red for Sales (10% green, 20% red line).
- Pace needed: within 10% by FY27-Q4 (3 more quarters): Finance -2.4 pts a quarter from 17.2%; Sales -5.2 pts a quarter from 25.6%. Run rate (change in the miss over the last 3 quarters): Finance -11.3 pts a quarter, Sales -4.5 pts a quarter. The quarterly miss is noisy (Finance: FY26-Q2 51.0%, FY26-Q3 8.1%, FY26-Q4 16.7%, FY27-Q1 17.2%), so one good quarter would not show control.
- Counter-metric: Signed bias (average forecast minus actual, as a % of actual) over the last 4 quarters: Finance +14.6%, Sales +34.3%. It stops a forecast looking accurate by being low-balled or padded in alternate quarters.
- Notes: Which forecast the CFO wants measured is still open (Q-5). Quarters where both forecasts exist: Finance 18.6% average miss, Sales 22.8%, and their simple average 17.8%. A rule that says 'next quarter equals last quarter' would have averaged 12.0% against Finance's 18.7%.
3. KPI tree
Problem: nobody can show, from one set of numbers, whether the business is still growing underneath the fall
O1 Get revenue back to A$115m within two years
K1 Total revenue, last 12 months, against the path to A$115m ........ Red
K5 Forecast accuracy (pending CFO) ................................ Amber
O1.1 Know whether we're still growing underneath the fall
K2 New devices activated in the field (pending Head of Platform Eng.) Red
K2.1 Months of stock cover at the OEMs that report ............ Red
O2 Keep software growing, with gross margin holding up
K3 Software revenue growth without one-off large licences ........ Red
K3.1 Share of software revenue from the largest licences ...... Red
K3.2 Gross margin %, last 12 months ........................... Green
O3 Keep design wins turning into shipping products
K4 Design wins that ship .......................................... Amber
K4.1 Months from design win to first shipment ................. no target yet
K4.2 Design wins per quarter .................................. read with K4
Every sub-KPI rolls up to one of the Top 5, and every Top 5 KPI links to an objective. Backlog (not built, Gary's list): Underlying earnings (EBITDA); Design wins per quarter as a page-one headline; Paid software features switched on in the field.
↑ Back to top4. Root Cause Findings
All five Top 5 KPIs are off target or have moved, so each one has a case file. Method: clues, suspects, tests, ruled out, verdict, solution options. Every test is in 02_calculations.py with its result in 02_results.json. Evidence labels: Observed Fact, Strong Inference, Working Hypothesis. Solution options are suggestions for Gary, the action owner and the subject matter expert. They are not actions or targets.
Case 1: Total revenue, last 12 months, against the path to A$115m (K1)
Clues. The 12-month figure fell from A$122.1m (2024-06) to A$80.5m. It did not slide: hardware revenue halved in one step, from A$25.7m in FY25-Q4 (Apr to Jun 25) to A$12.9m in FY26-Q1 (-50%), then stayed flat for five quarters at A$12.6m to A$14.5m. Software added one A$7.4m licence in Mar-26. The fall is in units: OEMs bought 47% fewer in FY26 (4,883,606 to 2,590,114), at an average price 0.9% higher.
Bridge, FY25 to FY26 (the A$37.8m fall)
| Step | Effect on revenue | What it is |
|---|---|---|
| FY25 revenue | A$118.4m | Ledger |
| End-customer installs fell 3.3% | -A$1.8m | Change in devices activated x FY25 average price per unit |
| OEMs bought fewer units than they installed (sell-in against installs) | -A$48.0m | The rest of the hardware volume change |
| Price and product mix | A$0.4m | SKU by SKU, FY26 units x change in price |
| Volume rebates paid | A$4.5m | Smaller rebates on smaller purchases (helps revenue) |
| The Mar-26 perpetual licence | A$7.4m | One contract |
| Other software | -A$0.3m | Everything else in software |
| Other (developer kits, freight) | A$0.0m | |
| FY26 revenue | A$80.6m | Ledger. Unexplained: A$0.0m |
Suspects and tests
| # | Suspect | Test (all in the script) | Result | Verdict |
|---|---|---|---|---|
| 1 | Industry soft patch: end customers installing less (Marcus's view) | Devices activated, FY26 against FY25 (k2.fy_activations) | Installs -3.3%, which is 4% of the unit fall | Small part only. Real, but explains about A$1.8m of A$49.8m |
| 2 | OEMs buying less than they install (stopped buying ahead / destocking) | Units invoiced per device activated; orders against installs by phase; lead times; OEM stock reports | Ratio 1.91 (Jan to Jun 25) to 1.04 (Jul-25 to Sep-26). Orders ran at 2.0x installs in Jul-24 to Apr-25 and 1.03x since May-25. Reporting OEMs' stock peaked at 1,590,583 units (2025-Q2) and is 45% lower like for like | Supported. The main cause |
| 3 | Lost customers | OEMs buying in FY25 and FY26 | 409 bought in FY25, 408 in FY26; 1 lost. 409 of 409 bought less (median change -52%) | Ruled out |
| 4 | One OEM, tier, region or product | Change by tier, region and SKU; top-10 share | Tiers A -46%, B -46%, C -49%. Regions AMER -53%, APAC -48%, EMEA -52%, GCHINA -35%. All 7 SKUs between -48% and -44% in units. Top-10 OEM share 24.6% to 25.7% | Ruled out. Broad-based. Greater China fell least |
| 5 | Price cuts | Average price per unit, by SKU | +0.9% overall; every SKU between +0.4% and +1.4% | Ruled out |
| 6 | Exchange rates | FY26 non-AUD hardware lines re-priced at FY25 rates | FX added A$607k to FY26 hardware | Ruled out (it helped) |
| 7 | Rebate-driven quarter-end buying unwinding | Share of hardware revenue in quarter-end months; rebate months | Quarter-end months were 46% of FY25 hardware (33% if even), 37% in FY26. Rebates are only ever booked in quarter-end months. Rebate rate 6.7% to 4.6% | Part of the mechanism for suspect 2, not a separate cause (rebates follow volume) |
| 8 | Reporting or cut-off change | Invoices against ledger by year and family; unmapped accounts | Largest difference A$0.00; 0 unmapped rows | Ruled out |
| 9 | Supply: OEMs had to buy ahead because lead times were long | Quoted lead time by month | 48 weeks in Mar-23, 8.5 weeks by Jun-24 and about 8 since | Consistent with 2: once supply was quick, there was less reason to hold a buffer |
Timing check. Quoted lead times fell from about 48 weeks to about 8 between Sep-23 and Jun-24. Orders then collapsed (27,327 units a month in Oct-23 to Jun-24 against 400,190 before) while invoices carried on from the order book. Orders came back at about twice installs (412,052 a month against 210,839) from Jul-24 to Apr-25, and revenue held until Jun-25. From May-25 orders matched installs (214,392 against 207,237), and the revenue step arrived in Jul-25. The cause (OEMs buying more than their installs) came before the effect (revenue stepping down when they stopped).
Verdict.
- Hardware sell-in fell to match installs: about A$48.0m of a A$49.8m hardware volume fall. The bridge adds up to the A$37.8m fall with A$0.0m unexplained. Bridge arithmetic: Observed Fact. The reading that OEMs bought ahead of need for two years and have now stopped: Strong Inference (timing fits and the other suspects are ruled out, but we cannot see the OEMs' own reasons).
- End-customer demand: A$1.8m. Real but small. Observed Fact on the sample, with coverage of the telemetry unconfirmed (Q-4).
- Two offsets hid part of the fall: the Mar-26 licence (A$7.4m) and smaller rebates (A$4.5m).
- How big the stock overhang was is a Working Hypothesis. Units invoiced exceeded units activated by about 6.9 million from Jul-22 to Jun-25. The 35 reporting OEMs held at most 1.6 million at the peak and cover 46% of hardware revenue. Either the other OEMs hold a lot, or the telemetry sees only part of the installed base. The data cannot separate the two.
What it means for the path. Since Jul-25 invoiced units sit close to installs (1.04x), so hardware is no longer being pulled down by a sell-in gap. If installs stay flat, hardware revenue stays near A$13.4m a quarter. Getting back to A$115m then needs growth that no current measure shows. Stock reports still show 10.9 months of cover at the reporting OEMs, so further destocking is possible.
Data that would settle the open parts. The Head of Platform Engineering on telemetry coverage and the share of devices that phone home (Q-4). Stock reports from all Tier A and B OEMs, not 35 voluntary ones (VP Sales). The rebate scheme terms by quarter (CFO). Why OEMs ordered at twice installs from Jul-24 to Apr-25: a direct question to the top 10 OEMs.
Solution options (for the CEO, CFO and VP Sales to weigh).
- Build the hardware forecast and plan from installs and OEM stock rather than last year's invoices (moves Total revenue K1 and Forecast accuracy K5).
- Ask the top 10 OEMs for monthly stock and their own sell-through, to see whether the overhang is gone (moves OEM stock on hand K2.1 and Total revenue K1).
- Review how volume rebates are tiered, because buying piled into quarter-end months (moves Total revenue K1 and its margin counter-metric).
Case 2: New devices activated in the field (K2)
Clues. The 12-month growth is -1.4%, below the +5% target. The monthly detail is sharper: every month from Jul-24 to Jun-25 was up on the year before (average +5.0%); every month from Jul-25 to Jun-26 was down (average -3.3%); Jul to Sep 26 is up again at +4.9%. Quarter by quarter: FY25-Q4 +4.9%, FY26-Q1 -3.2%, FY26-Q2 -3.3%, FY26-Q3 -4.1%, FY26-Q4 -2.7%, FY27-Q1 +4.9%. The 12-month figure still contains nine down months and three up months.
| # | Suspect | Test | Result | Verdict |
|---|---|---|---|---|
| 1 | Seasonality | Share of each year's activations by quarter, FY23 to FY25 | 24.0%, 24.0%, 24.0% in Q1 each year; the four quarter shares are within 0.2 pts of each other across the three years | Ruled out |
| 2 | One country | Dip (Jul-25 to Jun-26) by country | 20 of 21 countries down (-6.3% to +0.8%). Latest quarter: 19 of 21 up | Ruled out. Broad |
| 3 | One product | Dip by product group | Chips -3.4%, modules -3.1%, cards -3.8% | Ruled out. Broad |
| 4 | One or two OEMs | Growth by OEM, 12 months | 130 of 319 OEMs grew; median OEM -1.3% | Ruled out |
| 5 | Repeat serials or test devices counted as new | Repeat-serial share before and during the dip; beta firmware | 0.47% before, 0.53% during. No beta rows after 2022 | Ruled out |
| 6 | A telemetry change that stopped devices reporting | Monthly devices seen in the heartbeat table around Jul-25; firmware release dates | Devices seen 2025-06: 31,183, 2025-07: 31,608 (sample counts, no drop). New firmware 4.5.0 first appears 2025-07, the month the dip starts | Not ruled out. The reporting count held, but the coincident firmware release needs Engineering to confirm |
| 7 | A real change in end-customer demand | None possible with our data | We hold no end-market data | Cannot be tested here |
Verdict. The shortfall is a 12-month dip of about 3.3% that was broad across countries and products, followed by a recovery to +4.9% in the latest quarter. Effect on the 12-month figure: 35,890 fewer devices than the year before (1.4%). The dip and the hardware sell-in reset both start in July 2025. That is a clue, not a confession: the sell-in reset is fully explained without it (installs explain 4% of the unit fall). The cause of the dip is not settled by this data. Dip and recovery facts: Observed Fact. Any cause: Working Hypothesis.
Data that would settle it. The Head of Platform Engineering on whether firmware 4.5.0 changed when a device reports its first activation, and on coverage (Q-4). Sell-through from the top 10 OEMs for H2 2025.
Solution options.
- Ask the Head of Platform Engineering to confirm the firmware and coverage question before the board sees this measure (moves New devices activated K2).
- Show the latest quarter's growth beside the 12-month figure, because the 12-month figure lags a turn by about nine months (a display choice for Viktor and Gary).
- Ask the VP Sales to check with the top 10 OEMs why their end sales dipped in H2 2025 and recovered (moves K2 and the sell-in view).
Case 3: Software revenue growth (K3)
Clues. Growth over the 12 months to Sep-26 is +19.7% (FY26: +38.2%). March 2026 software revenue was A$8.3m; a normal month is A$0.6m to A$2.3m. The licence table shows why: one perpetual licence, A$7.4m, Corvane (OEM0079), signed 2026-03-27, with 0 seats.
Bridge, 12 months to Sep-25 to 12 months to Sep-26
| Step | Effect | What it is |
|---|---|---|
| Software, prior 12 months | A$21.01m | Ledger |
| The 2026-03 perpetual licence | A$7.40m | One contract |
| Other perpetual licences | -A$3.52m | 105 deals to 81 deals; deals under A$500k A$14.1m to A$10.9m |
| Annual subscriptions | A$0.23m | New and renewed contracts started in the window |
| Monthly subscriptions | A$0.05m | |
| Licence table against ledger | -A$0.03m | Small difference between the two sources |
| Software, last 12 months | A$25.14m | Ledger |
| # | Suspect | Test | Result | Verdict |
|---|---|---|---|---|
| 1 | One large deal | Bridge above; growth without the licence | +19.7% with, -15.6% without. The licence is 29% of the 12 months | Supported. The cause |
| 2 | Broad growth across many licences | Perpetual deals ex the big one; subscriptions | Perpetual ex the big one: -20%; subscriptions +6.6% (A$4.1m against A$3.8m) | Ruled out. Only subscriptions grew, and slowly |
| 3 | Subscriptions not renewing | Renewal rate on decided annual contracts | 88.7% now, 88.2% the year before | Ruled out |
| 4 | Bigger deals | Median perpetual deal; deals over A$500k | Median A$120k to A$106k; deals over A$500k 5 to 4 | Ruled out |
| 5 | Reporting or timing | Licence table against ledger, month by month | Within A$27k in any month | Ruled out |
Verdict. Software growth is one contract. It adds A$7.4m, worth 35 points of growth (the figure is 19.7% with it). Without it software is -15.6% over 12 months and -1.6% for FY26. Numbers: Observed Fact. That it will not repeat: Strong Inference (a single contract at 29% of the year's new contract value, 9 times the next largest, in a year when no other licence topped A$864k). What the contract actually is: unknown. The FY27 board plan repeats it (plan software for Mar-27 is A$9.9m, which is last March plus 15%).
Data that would settle it. The contract and its revenue recognition (CFO). Whether any other deal of that kind is in the pipeline (VP Sales).
Solution options.
- Report Software revenue growth (K3) with and without the largest licence, until the CFO says what it is (moves K3).
- Ask the CFO to confirm how the licence is recognised, and whether annual subscriptions are booked in full at the start date (the ledger matches contract start dates), because that decides how repeatable the base is.
- Ask the VP Sales and CFO to set the software target on repeat revenue (subscriptions and small perpetual deals), which grew 5% to 7%, rather than on total software.
Case 4: Design wins that ship (K4)
Clues. 31.5% of design wins old enough have shipped, against Marcus's belief of about 80%. It has been flat across the last four quarter-ends (30.8%, 31.4%, 31.7%, 31.5%). By design-win quarter, none of the first eight cohorts is above 39%. For the Jan to Jun 2023 cohort (430 wins, now 39 to 45 months old), the shipped share levels off at 32%. Of design wins at least 3 years old, 35% shipped, 6% were lost and 60% are still open.
| # | Suspect | Test | Result | Verdict |
|---|---|---|---|---|
| 1 | The bonus: wins logged to earn A$400 each, no clawback (from Jul-24) | Equal-age comparison before and after 1-Jul-24: shipped within 18 months | 21.6% before (1,380 wins), 22.8% after (754 wins) | Not the cause of the low rate. The rate was already about a third before the bonus |
| 1b | The bonus: dilution of quality | Wins per quarter; median estimated annual revenue; lost within 12 months; pre-production within 12 months; wins in the last week of a quarter | Wins per quarter 230 to 273 (+19%); median estimated annual revenue A$50k to A$38k; lost within 12 months 2.5% to 6.5%; pre-production within 12 months 42.3% to 38.8%; last-week share 5.9% to 6.9% (7.7% if spread evenly) | Early warning, not yet a cause. More and smaller wins, more early losses; no clustering at quarter end |
| 2 | Window too short (18 months) | Shipped share by age, Jan to Jun 2023 cohort | 12 months 7%, 18 months 21%, 24 months 27%, 36 months 32%, 42 months 32% | Ruled out. The curve flattens near a third |
| 3 | Missing dates hide the shipped ones | Sensitivity: count undated records by current stage | 29.7% against 31.5% | Ruled out for the level. It does cap the evidence label at Working Hypothesis |
| 4 | A few owners, a region or an OEM tier | Shipped share by owner (14 owners, at least 83 wins each), region and tier | Owners 24% to 41%; regions 29% to 35%; tiers 31% to 34% | Ruled out. Broad |
| 5 | Slow engineering support | No engineering support data | The CRM holds no reason codes or engineering status | Cannot be tested here |
| 6 | The hardware reset (Jul-25) cooling OEM programmes | Pre-production and lost within 12 months, by cohort | Pre-production within 12 months 36% to 47% across cohorts, no break at Jul-25. Lost within 12 months rises from FY25-Q2 | Partly. Lost rises, but the shipped share was low before |
Verdict. The shortfall against 80% is not new and is not explained by the bonus, the window, or missing dates: the ship rate has been about a third for every cohort we can see since Jan-23, and 80% was a belief that had never been measured. Observed Fact for the dated records; Working Hypothesis overall, because a third of the records have no dates. The CRM also holds a large pile of old design wins that are neither shipped nor lost (1,308 in the 18-month cohort, 60% of those 3 years old). Whether they are slow or dead is not recorded. Working Hypothesis. The bonus shows early signs of diluting what counts as a design win (more, smaller, earlier-lost) while the shipping rate has not moved. Effect on K4 so far: 0 pts of the 48.5 pt gap; the rest is unexplained by the data.
Data that would settle it. A reason for each lost or stalled design win. A product to SKU key between the CRM and the ERP, so shipping can be confirmed from invoices. The design-win dates for the undated records.
Solution options.
- VP Sales runs a close-out review of the old open design wins: mark each shipped, lost or live, with a reason (moves K4 and the lost counter-metric).
- VP Sales, CFO and the people team look at paying on pre-production or shipping, or adding a clawback, because the A$400 is paid at design win with no clawback (moves K4 and Design wins per quarter K4.2). The incentive is not a Stage 2 decision.
- Reset the K4 target after the clean-up and the Q-11 window are agreed, using the measured baseline (a suggestion to Gary and the VP Sales).
Case 5: Forecast accuracy (K5)
Clues. Neither forecast has been within 5% since FY24-Q4: Finance was within 5% in 2 of 13 quarters, Sales in 0 of 12. The miss got worse after the hardware step in Jul-25: average miss before FY26-Q1 was 13.8% (Finance) and 14.8% (Sales); from FY26-Q1 it is 26.5% and 33.9%. Over the last 4 quarters (FY26-Q2, FY26-Q3, FY26-Q4, FY27-Q1) actual revenue was A$80.5m; Finance was too high by A$11.3m and Sales by A$27.6m.
| Where the 4-quarter miss sits | Finance | Sales |
|---|---|---|
| Hardware | A$9.1m | A$24.0m |
| Software | A$2.2m | A$3.6m |
| Other | A$0.0m | -A$0.0m |
| Total (forecast minus actual) | A$11.3m | A$27.6m |
| # | Suspect | Test | Result | Verdict |
|---|---|---|---|---|
| 1 | Mixed units (AUD and AUD thousands) | Compare raw and converted FY24 Finance totals | Raw FY24-Q1 total A$26,480 against converted A$26.5m. All thousands rows are FY24; every quarter since is in AUD | Ruled out as a cause of recent misses. A data trap, handled |
| 2 | The hardware step in Jul-25 that no forecast saw | Error before and after FY26-Q1; FY26-Q1 hardware | FY26-Q1 hardware: Finance forecast A$22.5m, Sales A$18.2m, actual A$12.9m. Misses roughly double after the break | Supported |
| 3 | Sales is always optimistic | Sign of the error each quarter | Sales too high in 12 of 12 quarters, average +22.8%; even before the break +14.8% | Supported (the pattern). The reason is not testable here |
| 4 | Finance just rolls the last run rate forward | Finance forecast against the previous quarter's actual and the year-ago quarter's actual | Median gap to the previous quarter 9%, to the year-ago quarter 17%. A plain 'same as last quarter' rule averages 12.0% against Finance's 18.7% | Ruled out as a pure run rate. Finance's numbers differ from a plain roll-forward, and a plain roll-forward would have scored better (why is not testable here) |
| 5 | One-off software deals | Software forecast error in FY26-Q3 (the licence quarter) | Quarter software A$10.5m (A$3.1m without the licence). Finance -36% with it, +117% without; Sales +17% and +297% | Minor on dollars, but it hid that both software forecasts were well above the underlying run rate |
| 6 | Snapshot timing | Days between snapshot and quarter start | 2 to 5 days for every snapshot used | Ruled out |
| 7 | Finance's latest forecast is off the plan | FY27-Q1 hardware: board plan, Finance forecast, Sales forecast, actual | Plan A$14.8m (set 2026-06-15), Finance forecast A$7.1m (2026-06-26), Sales A$17.8m, actual A$13.4m | Open. Finance's forecast is 52% below its own plan 11 days earlier. It looks like the Jul-25 step was applied twice (Working Hypothesis) |
Verdict. The forecasts are off for three stacked reasons. (1) Hardware, and the missed reset, is most of the dollars: 80% of Finance's four-quarter miss and 87% of Sales's. Same cause as Case 1. Strong Inference. (2) Sales has a standing upward bias of about 23%, present before the reset. The pattern is an Observed Fact; why is a Working Hypothesis (it fits a CRM that reps work to a bonus, but this data cannot test that). (3) Finance's latest forecast under-calls hardware by about 47% and is far from its own plan. Working Hypothesis. Software lumps add noise but little dollar error. The effects add up: hardware plus software plus other equals each source's total miss in the table. Unexplained: none by construction; the table splits each source's own miss.
Data that would settle it. How the Finance and Sales forecasts are built (the CFO and VP Sales, Q-5). Why the 26-Jun-26 Finance hardware forecast is half the 15-Jun-26 plan.
Solution options.
- One forecast for Finance and Sales, built from installs and OEM stock (Case 1) and reviewed against a 'same as last quarter' benchmark each quarter (moves K5).
- Report each forecast's bias with its accuracy, and correct Sales's forecast for its historic bias before it is used (moves K5).
- CFO explains the gap between the FY27 plan and the 26-Jun-26 Finance forecast before K5 goes on page one.
5. Corrections to Gary's draft measures, and challenge notes
5a. Corrections (Before and After in full)
| # | KPI | Before (Gary's draft) | After (Kewpie) | Why |
|---|---|---|---|---|
| A1 | Total revenue (K1) | Filters: "Hardware = 4000, 4050, 4200; software = 4100, 4110 (Kewpie to confirm)" | Hardware = 4000 and 4050 (hardware sales less volume rebates). Software = 4100 and 4110. Other = 4200 and 4210 (developer kits and freight recovered). All six accounts stay in total revenue. | Developer kits are not hardware sales, and the board plan and the forecasts treat them as 'other'. The total is unchanged and reproduces A$118.4m (FY25) and A$80.6m (FY26). |
| A2 | New devices activated (K2) | Filters: "First activation only: one row per device_serial"; OEM split from oem_id | First activation only: keep the earliest first_seen_ts per serial (5,040 repeat rows dropped). Fill a blank oem_id from the OEM that owns the same manufacturer_code (22,024 rows recovered; 85,186 stay unassigned). | Repeat serials are devices re-joining a network. The OEM backfill changes only the split by OEM. The 'exclude beta' rule has no effect in the window. |
| A3 | Months of stock cover at the OEMs that report (K2.1) | Divisor left open: "average monthly units activated or invoiced (Kewpie to confirm)"; stock "SUM(units_on_hand, reels x 500)" at reporting OEMs | Divisor = average monthly units invoiced to the same OEMs in the same quarter (erp_invoice_lines.qty, chip, module, card). Stock = units_on_hand, reels x 500, from OEMs that reported in that quarter; names cleaned to match oem_master. | Invoiced units are the same unit as the stock, full scale and carry an OEM on every hardware line. Activations are a 1-in-10 sample with 7% of devices unassigned. Result in 2026-Q3: 10.9 months (Gary's draft said 9.3). |
| A4 | Software revenue growth (K3) | Formula (v1.1 draft): "leaving out any single licence worth more than A$1m (threshold to agree with the CFO)" with the calculation -1 * SUM(gl_monthly.amount_aud) for accounts 4100 and 4110, R12M over prior R12M, minus 1 (no exclusion in the calculation) | Calculation now includes the exclusion: (software R12M less licences over A$1m started in R12M) / (software prior R12M less licences over A$1m started in prior R12M) - 1. Growth including them is shown alongside. | The calculation had to match the plain English. Result -15.6% (1 licence removed). |
| A5 | Design wins that ship (K4) | Calculation: "COUNT(opp where stage_entered_shipping not blank) / COUNT(opp where stage_entered_design_win <= today - 18 months)"; Sources include "erp_invoice_lines.oem_id, sku (cross-check)" | Same ratio, with 'today' fixed at the end of the data (30-Sep-26), shipped defined by the shipping date, and rows with no stage dates excluded and counted. The invoice cross-check is dropped for lack of a key. | A stage field without dates cannot be placed in a cohort. OEM-level invoices cannot confirm a product shipped: nearly every OEM buys every year. |
| A6 | Months from design win to first shipment (K4.1) | Calculation: "MEDIAN(months_between(stage_entered_design_win, stage_entered_shipping))" for opportunities that shipped | Same median, restricted to design wins at least 18 months old. | Younger cohorts only show their fastest shippers. Median 15.0 months for mature cohorts against 14.3 for all. |
| A7 | Forecast accuracy (K5) | Calculation: "ABS(actual_q - forecast_q) / actual_q; forecast_q = forecast_snapshots.forecast_amount from the snapshot nearest the quarter start" | error = (forecast - actual) / actual, reported as a signed figure and an absolute figure. Forecast = latest snapshot on or before the first day of the quarter, converted to AUD, summed over hardware, software and other. Actual = hardware (4000, 4050), software (4100, 4110), other (4200, 4210). | 'Nearest' could pick a snapshot taken after the quarter began. The sign shows bias. The family mapping matches the board plan. |
Measures confirmed as drafted: Share of software revenue from the largest licences (K3.1), Gross margin %, last 12 months (K3.2) and Design wins per quarter (K4.2).
5b. Challenge notes
| # | KPI | Issue | Evidence | Suggested fix | Status |
|---|---|---|---|---|---|
| C1 | Total revenue (K1) | The FY27 board plan is below the straight-line path in Gary's thresholds. Plan A$92.7m (BT-02, Finance, 15-Jun-26) against A$97.8m on the straight line at Jun-27: -A$5.1m (-5.2%). On Gary's thresholds, plan delivery would already be Red against the path. | board_targets, board_plan_fy27 | CFO to explain how the A$115m and FY27 numbers fit together (Q-1, Q-2). Gary to re-check the straight-line path with the CFO. | Noted in v1.1 (target rationale and threshold note) |
| C2 | Total revenue (K1) | The FY27 plan repeats the one-off licence. Every plan line is FY26 x 1.15 (checked line by line: every ratio is 1.15), so Mar-27 software is A$9.9m, which carries A$8.5m for the Mar-26 licence. Without it the plan is A$84.2m. Actual Jul to Sep 26 is A$19.4m against a plan of A$22.4m. | board_plan_fy27, software_licences | Gary to carry this into the target rationale. CFO to confirm whether the plan should repeat it. | Noted in v1.1 (target rationale) |
| C3 | Total revenue (K1) | Hardware revenue can be pulled into quarter-end months by volume rebates. In FY25, 46% of hardware revenue landed in quarter-end months (33% if even), and rebates appear only in those months. Gary's draft has no check on this. | erp_invoice_lines, gl_monthly | Gary to consider a rebate-rate or margin counter-metric on the page. Kewpie has used Gross margin % as the counter-metric and noted the rebate rate. | Open |
| C4 | New devices activated (K2) | The measure is only as good as the telemetry's coverage. Units invoiced per device activated were 1.91 to Jun-25 and 1.04 after. Either OEMs held large stocks, or the telemetry sees only part of the installed base. Both cannot be separated. | device_activations, erp_invoice_lines | Head of Platform Engineering to answer Q-4 (coverage, phone-home, firmware 4.5.0 from Jul-25). Keep K2 off page one until then, as Marcus asked. | Open |
| C5 | Software revenue growth (K3) | The target fails the Attainable test. Growth is +19.7% only because of one A$7.4m licence (-15.6% without it). To reach +20% for FY27 software needs A$2.78m a month for 9 months, against A$1.48m a month underneath. | gl_monthly, software_licences | Gary, VP Sales and CFO to set the target on repeat revenue, or to show growth with and without large single licences (Q-3). | Resolved in v1.1 (K3 now excludes one-off licences, target 0%) |
| C6 | Software revenue growth (K3) | Annual subscriptions appear to be booked in full at the contract start date: the licence table (by start date) equals ledger software revenue within A$27k a month. If so, software revenue is not spread over the term, and 'repeatable' needs a different measure. | software_licences, gl_monthly | CFO to confirm revenue recognition for subscriptions and for the Mar-26 licence. | Open |
| C7 | Share of software revenue from the largest licences (K3.1) | The licence is 29% of the year's started contract value and sits Red until it leaves the 12-month window in Mar-27, which fixes the figure without any change in behaviour. The customer is an OEM; naming is for the CFO and legal (Q-7). | software_licences | Gary to add 'with and without the largest licence' to the view. Customer name stays off the board page. | Noted in v1.1 (shown with and without the licence) |
| C8 | Gross margin % (K3.2) | Gary's target is 77%. The board's own FY27 gross margin target is 76% (BT-03, Finance). Also, 12-month margin includes the licence: 76.5% with, 74.1% without, so the 77% hold-the-line target is Red without it. | board_targets, gl_monthly | Gary and CFO to align the target with BT-03 and agree whether one-offs are shown. | Resolved in v1.1 (target 76%, with and without one-offs) |
| C9 | Design wins that ship (K4) | The target fails the Attainable test. Baseline 31.5%; pace needed +5.4 pts a month against a run rate of +0.08 pts. Marcus's 80% was a belief, never measured. The curve for the oldest cohort levels off near a third. | crm_opportunities | Gary and the VP Sales to reset the target once the Q-11 window and the CRM clean-up are agreed. Kewpie has not changed the target. | Resolved in v1.1 (target 35%) |
| C10 | Design wins that ship (K4) | The data cannot fully support the measure. 2,932 of 8,990 CRM rows (33%) have no stage dates; 33% of design-win-or-later records cannot be placed in a cohort, so the baseline is a Working Hypothesis. The draft's 'confirm shipping against invoices' has no product key between the CRM and the ERP. | crm_opportunities, erp_invoice_lines | VP Sales and Finance to add a shared product or SKU key; VP Sales to back-fill dates. | Actioned in v1.1 (data notes: date back-fill, shared product key) |
| C11 | Design wins that ship (K4) | Reps are paid A$400 per design win with no clawback. FY26: 1,180 wins, about A$472k (assuming every dated win was paid). The counter-metric (share lost after design win) is in place, but the data holds no reason codes, so a win logged only for the bonus cannot be told apart. | sales_incentive_plans, crm_opportunities | Gary to add a 'reason lost' field request to the Requirements. The incentive design is for the VP Sales, CFO and the people team, not Stage 2. | Actioned in v1.1 (reason lost request; bonus referred out) |
| C12 | Forecast accuracy (K5) | The measure is not yet one metric (Specific). Finance and Sales forecast differently (19% apart in the median quarter) and the CFO has not said which counts (Q-5). Neither has been within 5% since FY24-Q4, so even the 10% line is far from history: to reach the new 10% line Finance needs -2.4 pts a quarter. | forecast_snapshots, gl_monthly | CFO to choose the forecast and the tolerance (Q-5). Gary to keep K5 off page one until she does. | Partly resolved in v1.1 (10% and 20% bands; CFO still to choose the forecast) |
| C13 | Forecast accuracy (K5) | Data problems in the forecast table: 12 Finance rows in AUD thousands (fixed); the Sales snapshot for FY25-Q3 is missing; one Sales revision (13-Oct-25) falls after its quarter began. And Finance's 26-Jun-26 hardware forecast (A$7.1m) is 52% below Finance's own 15-Jun-26 plan (A$14.8m). | forecast_snapshots, board_plan_fy27 | Add an 'amount_unit' check to the data load. CFO to explain the gap. | Open |
| C14 | OEM stock on hand (K2.1) | Gary's title says top 40 OEMs. Only 35 report, covering 46% of FY26 hardware revenue, and 235 spellings of the names had to be cleaned. The measure has no target or thresholds yet. | oem_inventory_reports, oem_master | Gary to set thresholds from the baseline, for example on months of cover (10.9 at the reporters now). That would be a new measure, so it is Gary's call. | Resolved in v1.1 (replaced by Months of stock cover, 6 and 9 month lines) |
| C15 | Design wins per quarter (K4.2) | Design wins have risen from 230 to 273 a quarter since the bonus, with smaller estimated deal size and no change in the shipping rate. It remains a sub-KPI as Gary proposed. | crm_opportunities | No change. Read it with Design wins that ship. | Logged |
6. Data quality log
| Table | Problem | Count | How handled |
|---|---|---|---|
| gl_monthly | Rows with an unmapped account / duplicate month-account-cost-centre rows | 0 / 0 | None needed |
| erp_invoice_lines | Lines with no oem_id / no order_id | 3,161 / 2,200 of 392,709 | Kept in totals. The lines with no OEM are all software subscriptions (none are hardware), so the hardware OEM tests are unaffected; lines with no order are rebates and 1,331 hardware lines |
| erp_invoice_lines | Non-AUD lines with no fx_rate_used | 34,737 (none in the last 24 months) | net_amount_aud is present, so no effect |
| sales_orders | Orders with no quoted lead time | 11,542 of 391,848 | Averages use the rows that have one |
| device_activations | Repeat serials | 5,040 of 1,198,459 (1,611 in the last 24 months) | Earliest kept |
| device_activations | Rows with no oem_id; after backfill from manufacturer_code | 107,210; 85,186 (7.1%) | Affects the OEM split only, not the headline |
| device_activations | Beta firmware rows | 2,197, none after 2022 | No effect on the window |
| device_activations | product_model_string is free text | all rows | Not used |
| device_heartbeat_monthly | Used only to check that devices kept reporting through Jul-25 | 1,236,586 rows, 58,917 devices (sample) | Not a KPI source |
| crm_opportunities | Rows with a stage but no stage dates at all (last edited 2018 to Jan-23) | 2,932 of 8,990; 1,914 past design win | Excluded from K4 and counted; baseline labelled Working Hypothesis |
| crm_opportunities | Shipping date but no design-win date | 349 | Counted separately, not in the rate |
| crm_opportunities | Design win with no design-in date | 245 (none after mid-2023) | Not used in the rate |
| oem_inventory_reports | OEM name spellings / OEMs after cleaning | 235 / 35 | Cleaned; all match oem_master; 0 unmatched |
| oem_inventory_reports | Reel rows (count of reels of 500) / finished-goods rows | 88 / 229 | Reels x 500; finished goods kept and noted |
| oem_master | Same OEM name on two IDs (Gareth Acoustics Ltd, OEM0409 and OEM0410) | 1 name | First match used for stock-report names; neither is among the stock reporters |
| software_licences | Contracts with no oem_id | 1,750 of 3,096 | Not needed for the KPIs |
| software_licences | Licence table against ledger | within A$27k in any month | Ledger used for the KPI, table for the detail |
| forecast_snapshots | Rows in AUD thousands | 12 of 84 | Multiplied by 1,000 |
| forecast_snapshots | Missing Sales snapshot / revision after the quarter began | FY25-Q3 / FY26-Q2 (13-Oct-25) | Quarter excluded for Sales / revision ignored |
If more than 5% of a KPI's population is unmatched or missing, its baseline is labelled a Working Hypothesis. That applies to Design wins that ship (K4) only.
Files: 03 - Working Files/02_calculations.py, 02_results.json, 02_build_pack.py, spec.json (Kewpie's columns).