← All work

Nebius (acq. Tavily) · Oct 2025 – May 2026 · Abu Dhabi

Giving leadership a twelve-month view they trust

A revenue data platform ingesting a million records a day with CDC and SCD2 history, and a twelve-month forecasting engine for revenue, usage and user growth with 2x/3x scenario simulation.

Role

Lead DS, end to end

Volume

1M+ records/day

Outcome

12-mo, auto-refresh

The stakes

Usage-based businesses are forecast-hostile. Revenue is not a contract you can read off a schedule. It is the sum of what a lot of customers happened to do last month, and a handful of them dominate the total. Capacity decisions on the infrastructure side have long lead times, so being wrong is expensive in both directions.

There was a second, less glamorous problem underneath: nobody could reconstruct what the numbers had looked like a month ago. Records were overwritten in place, so a restated figure was indistinguishable from a mistake, and every forecast review turned into an argument about the data instead of the future.

The system, in three stages

1 · Ingest

CDC from billing, usage and CRM, at 1M+ records a day

2 · Version

SCD2 warehouse with as-of queries, so history can be reconstructed

3 · Forecast & simulate

12-month cohort-level base case plus 2x/3x scenarios, scheduled refresh

Dashboards and alerting sit on top of the same versioned tables, so an alert can tell a real move from a late-arriving correction.

Three decisions, and what I turned down

01

Fix history before fixing the forecast

SCD2 versioning came first. It meant every model could be backtested against what was actually known at the time rather than against a restated present. It also ended the “is this number wrong, or did it change?” conversation permanently.

Rejected: forecasting on the existing overwrite-in-place tables to show value faster. Every backtest would have been quietly optimistic, and I would have had no way to prove otherwise.

02

Forecast the components and reassemble

Revenue was decomposed into acquisition, expansion, contraction and churn by cohort, then reassembled. A total-line model can hit the number for the wrong reasons; a decomposed one tells you which assumption broke when it misses, which is the only thing that makes a forecast improvable.

Rejected: a single time-series model on aggregate revenue. Better-looking error metrics on a short history, zero diagnostic value in a leadership review.

03

Ship scenarios

The engine produces a base case plus 2x and 3x growth simulations, because the real question in the room was never “what will revenue be.” It was “what breaks if we grow three times faster than plan, and when do we need to have bought it.” Same model, framed as a decision tool.

Rejected: a single confident number with a confidence interval nobody reads. It invites debate about the estimate rather than about the decision.

What came of it

1M+ / day

records ingested with full versioned history, powering leadership dashboards, forecasting and automated alerting.

2x / 3x

scenario simulations used for capacity and revenue planning, refreshed automatically rather than rebuilt by hand each cycle.

A related piece fell out of the same platform: user-level prediction of month-end usage and spend, which sales used to spot accounts heading for an overage and start the upgrade conversation before the invoice did it for them.

← All work Next: Customer insight engine →