Case notes

Case note: answering the CFO's question the same afternoon

TL;DRBecause every order, promotion and redemption already lives as a queryable event on one bus, an analyst joined the streams and answered the premium-mix question in an afternoon — no BI ticket, no three-week dashboard. The honest catch: without a semantic layer, three analysts produced three different premium-mix numbers, so we governed the definition.

A finance leader asked which outlets grew their premium mix after a combo promotion. We answered the same afternoon — not because we build dashboards quickly, but because we no longer build one to answer a question. Every order, promotion and redemption is an immutable event on one bus, kept queryable. An analyst joined three streams, filtered to the promo cohort, and had a defensible number before the meeting ended.

What did the old path cost?

The question itself was not hard. The old path was. A business question became a ticket, the ticket joined a backlog, the backlog fed a data-engineering sprint, and roughly three weeks later a dashboard appeared. Across the engagements we have watched, the median turnaround from ‘someone asks’ to ‘someone can see’ sat near fifteen business days. By then the promotion window had closed, the exec had moved on, or the question had mutated into a slightly different one the new dashboard could not answer.

The deeper cost was not the build time. It was that every question demanded a bespoke artefact. A dashboard is a frozen answer to a question you asked three weeks ago; the moment finance wants ‘the same thing, but by trade channel and net of returns’, you are back in the backlog. We had automated the wrong loop — we made report-building faster instead of making the question-to-answer loop shorter.

Why can one event store answer it in an afternoon?

Because the raw material was already there. On this platform every order line, every promotion application and every loyalty redemption lands as an immutable event on a shared bus — the same bus that let a price-ladder change reach every channel the same day and that carries the order-capture path we took from thirteen seconds to sub-second. Events are not fired and forgotten; they are retained and queryable.

To answer the premium-mix question, an analyst joined three streams — orders, the combo promotion’s applications, and the product master — filtered to outlets that ran the combo, and compared premium share in the weeks before and after. No new pipeline, no pre-aggregated cube. Columnar event stores make this practical: per its official introduction, as of early 2026, one widely used engine, ClickHouse, describes throughput of hundreds of millions to over a billion rows per second per server, so scanning months of events at query time is a matter of seconds, not a sprint.

The same interface is open to AI agents. Since the Model Context Protocol was published as an open standard in November 2024, we expose the event store through it, so an agent can be asked the premium-mix question in plain language and assemble the same joins an analyst would. That is convenient. It is also exactly where the trouble started.

What did not go smoothly?

Three analysts answered the question and produced three different numbers. None of them was wrong. One measured premium mix by volume, one by revenue, one by count of lines; one counted a mid-tier SKU as premium, another did not; one netted off returns, the others did not. Ad hoc freedom over raw events gives everyone the power to define ‘premium mix’, and left to themselves, everyone does.

The fix was not to lock the data down again. It was to define the metric once, above the events, in a semantic layer — the pattern that tools such as the dbt Semantic Layer, generally available since 2023, exist to enforce. ‘Premium mix’ now has one governed definition: which SKUs count, measured by revenue, net of returns. Analysts and agents still query freely; they simply resolve the metric through the same definition. We should have built that layer before we opened the doors, not after the CFO had seen two conflicting slides.

How do you get to same-afternoon answers?

If you are staring at a BI backlog and want questions answered in an afternoon, the moves are concrete:

  1. Make events first-class and queryable. Every order, promotion and redemption should be an immutable event on one bus, retained for analysis — not just consumed by the app and discarded.
  2. Land them at full grain. Keep events in a columnar store at event resolution. Do not pre-aggregate into cubes that answer last quarter’s questions and none of next quarter’s.
  3. Define metrics before you open access. Stand up a semantic layer and agree the handful of numbers finance argues about — mix, discount depth, effective price — before analysts and agents start querying.
  4. Expose one governed interface. Give analysts and AI agents the same permissioned, metric-aware entry point rather than raw table credentials.
  5. Leave the book of record alone. This store answers questions; it does not post journals. It runs alongside the client’s SAP financial core, exactly as the strangler approach that keeps SAP FI untouched intends.

The architecture that makes this cheap is the one event bus under the whole suite: capture, stock, loyalty, returnables and delivery all emit to the same log, so ‘join across the business’ becomes a query rather than an integration project.

The next questions are already less about dashboards and more about who — or what — is asking. When an agent can answer the premium-mix question in plain language, the constraint moves from ‘can we build the report’ to ‘do we trust the definition it resolved’. That is a governance problem, not a data-engineering one, and it is a better problem to have. We would rather argue about what premium mix means than wait three weeks to argue about it.

Frequently asked questions

Do we still need a data warehouse and BI tool?

Yes. The event store answers ad hoc questions at event grain, but a warehouse and BI still serve governed, repeatable reporting. The key addition is a semantic layer so a metric like premium mix is defined once and every tool — and every AI agent — resolves the same number.

Does querying events this way touch our SAP financial core?

No. SAP FI remains the book of record for postings and financial truth. The event store carries operational events — orders, promotions, redemptions — purely for querying and analysis. Answering a premium-mix question reads events; it never writes a journal, so finance’s system of record is untouched.

How do AI agents query the events without creating a mess?

Through one governed interface — we use the Model Context Protocol — that exposes defined metrics and permissioned streams rather than raw tables. Because the semantic layer resolves metrics centrally, an agent and an analyst asking the same question get the same premium-mix number, and access stays auditable.

Stuck with exactly this?

BrewOS builds the full route-to-market stack for global brewers — order capture, stock, loyalty, returnables, delivery and analytics on one event bus, run by a team of ~20 engineers. Bring us the feature that’s been stuck the longest and we’ll show you how we’d ship it in days.

Book a 30-minute walkthrough