Titan: rebuilding a SaaS plan as a hub and two spokes
Titan is a demo SaaS company with three customer segments and about $9.6M of ARR. Its first model lived in one Pigment application and was getting hard to change. I rebuilt it so actuals, plan and reporting each have a clear home, and so a monthly reforecast takes one sitting.
The problem
One application doing three jobs
The original model held master data, actuals, planning drivers and reports in a single application. Changing a driver meant scrolling past reporting blocks. Access was hard to scope, because everyone needed the whole app. There was no clean way to keep Budget fixed while Forecast moved.
The design
Hub, planning spoke, reporting spoke
The Data Hub owns the shared lists, calendar and loaded actuals, and it is the only place they change. Titan Planning holds the drivers and the ARR engine. Titan Reporting reads plan outputs and actuals and builds the income statement, SaaS KPIs and variance views. Reporting holds no inputs.
- A version dimension with Actual, Budget and Forecast. Each version carries its own start, switchover and end month, and Budget is locked.
- Version flags (is actual, is plan) decide, month by month, whether a number comes from actuals or the plan. No formula hard-codes a cutoff date.
- Five cases (Base, Upside, Downside, Severe Downside, Recovery) carry multipliers on new business, expansion and churn. They flow into the statements, not just the ARR.
The reforecast
A workbench instead of a grid
Planners use a custom page built on Pigment Frames. They change Forecast drivers on the left, the values write straight back to the model, and the ARR bridge on the right redraws against Budget. Budget values show alongside as read-only.
| Driver | Budget | Forecast |
|---|---|---|
| Quota attainment | ||
| All segments | 75.0% | 70.0% |
| Monthly churn | ||
| SMB | 1.50% | 1.80% |
| Mid-Market | 0.80% | 0.80% |
| Enterprise | 0.40% | 0.40% |
| Monthly expansion | ||
| SMB | 0.60% | 0.60% |
| Mid-Market | 1.00% | 1.00% |
| Enterprise | 1.40% | 1.40% |
| FY27 ARR bridge, Base | Budget | Forecast | Difference |
|---|
Lower quota attainment takes $135K out of new business, and higher SMB churn costs another $13K. With a slightly smaller base, expansion and contraction move a little too, and Forecast lands $154K below Budget. The planner sees the main causes without opening a single grid.
Monthly cycle
From reforecast to sign-off in one sequence
A guided two-step sequence takes the planner through the cycle. Step one is the drivers, with Budget and Forecast side by side. Step two reviews the result and has a Freeze button. Freeze copies the agreed Forecast ending ARR into a frozen baseline that only changes at sign-off, so later edits never blur what was approved.
An automated close check runs on the fifth of each month. It confirms the anchor figure still ties, that costs are conserved from department to function to P&L line, and that every control check reads zero.
Decisions that mattered
What I'd do the same way again
Version first, everything else after
The version dimension and its flags went in before any revenue logic, so every metric was built to hold two cycles with different switchovers.
Reporting holds no inputs
If a number can be typed, it lives in the hub or the planning spoke. That keeps the reporting app safe to share widely and simple to secure.
Checks that should read zero
Cost conservation and the ARR bridge each have a control metric. A non-zero value is a defect, which makes reviews quick.
Snapshot the plan you approved
Budget is locked and snapshotted on approval. Variance is always measured against what was signed, not what someone edited later.
Result
Same numbers, easier model
Every P&L line in the new model matches the original line for line, and the FY27 Budget ending ARR ties to the cent at $12,316,557. A reforecast is now a short guided session, and the original plan is protected by a lock and a snapshot.
Titan is a demo company with fictional data, built to show my approach end to end.
Planning a similar build?
I can walk you through Titan live and talk about how it maps to your model.