SPEC rev.2026.10 · 42.70°N 23.32°E · Sofia · EET/EEST · UTC+2/+3

// Machine view — the DOM of this page as a parser reads it


Team forecasting system: compare teams, predict the effect of roster changes

A deterministic forecasting engine: it models each performer separately, sums to the team and shows a range of outcomes from a Monte Carlo simulation. No language model touches the numbers.

§01 The case in detail

Task
Compare teams and predict how roster changes (new hires, departures) change a team’s results.
How it works

The system is a deterministic forecasting engine: no language model touches the numbers. It models each performer separately, then sums to the team.

A Monte Carlo simulation replays attrition, spend share by tenure cohort and returns, giving a range of outcomes drawn from real historical spread, not fixed percentages.

Incomplete months are flagged and imputed with explicit, labelled assumptions. Every run is versioned with a data fingerprint, and can be back-tested on history truncated to a past date.

Stack
FastAPI · server-rendered pages · e-mail one-time-code sign-in · three containers: web, build, compute (build and compute have no network)
Why no LLM
The forecast has to be reproducible and explainable. A fixed seed and a data fingerprint make every run repeatable, and the decision stays with a person: the tool is advisory.
Principles
  • Data
  • Per-performer data, not team aggregates
  • Tenure cohorts as a frame
  • Team-level bootstrap when per-performer data is missing
  • Unclosed months flagged
  • Model
  • Monte Carlo with a fixed seed (reproducible)
  • Attrition with smoothing (zero exits in a small sample is not zero risk)
  • Returns drawn from neighbours of similar spend size
  • Team budget as a shared ceiling
  • Control
  • As-of-date back-test against the fact
  • Risk rules (concentration, drawdown, unconfirmed spend)
  • Versioned runs with a data fingerprint
  • Advisory tool: the decision stays with a person
Architecture
Architecture as text: who passes what to whom

Sign-in

  • Team member ↔ CDN + proxy: requests
  • CDN + proxy ↔ Web: filtered
  • Web → Mail service: one-time code
  • Web ↔ Results DB: codes, sessions

Upload + build

  • Web → Uploads: stage Excel
  • Web → Results DB: queue request
  • Host timer → Build job: start
  • Uploads → Build job: read files
  • Results DB → Build job: requests
  • Build job → Team data: write
  • Operator → Team data: manual push

Forecast

  • Team data → Compute job: read only
  • Compute job → Results DB: runs, risks

View

  • Results DB → Web: runs, risks
  • Web → Team member: pages

§02 Deterministic Monte Carlo forecasting without an LLM: problem, approach, outcome

Problem
Compare teams and predict how roster changes (new hires, departures) change a team’s results.
Approach
A deterministic forecasting engine that models each performer separately and sums to the team. A Monte Carlo simulation replays attrition, spend share by tenure cohort and returns. Incomplete months are flagged and imputed with explicit, labelled assumptions.
Outcome
The forecast is a range of outcomes drawn from real historical spread, not fixed percentages. Every run is versioned with a data fingerprint, repeatable with a fixed seed, and can be back-tested on history truncated to a past date.

Short answers

Why forecast without a language model?
The forecast has to be reproducible and explainable. No language model touches the numbers; a fixed seed and a data fingerprint make every run repeatable.
What does the Monte Carlo simulation do here?
It replays attrition, spend share by tenure cohort and returns, and gives a range of outcomes drawn from real historical spread instead of fixed percentages.
How are incomplete months handled?
They are flagged and imputed with explicit, labelled assumptions. When per-performer data is missing, a team-level bootstrap is used.
How is the forecast checked against reality?
By an as-of-date back-test: the model runs on history truncated to a past date and is compared with what happened.
Is zero departures in a small sample treated as zero risk?
No. Attrition is smoothed, so a small sample with no exits does not mean no risk.
Does the tool make the decision?
No. It is an advisory tool and the decision stays with a person.

See also: Forecasts and dashboards CRM for a network of martial-arts clubs.

§03 Related

Have a task like this? Write to me.

Send me a message

It goes straight to my Telegram. I reply to the address you leave.

Your details are used only to reply to you.