Objectives tracking
The Tracking screen answers the module's founding question: "I have €2M on objective A — where do we stand?" For each objective it crosses envelopes, the amounts rolled up from projects, and achievement.
The columns
The fiscal year selector (top right) filters both the envelope and the amounts: when 2026 is selected, allocated, forecast and actual only count budget lines dated within the year — the balance thus compares same-period figures. The All fiscal years option shows the cumulated view (the envelope then becomes the sum of the node's endowments across all years). Achievement is not periodised: a project's progress is a global figure.
If an objective carries an OPEX or CAPEX nature (badge next to its name), all its financial columns only count budgets typed accordingly.
| Column | Content |
|---|---|
| Envelope | The node's endowment for the selected fiscal year. |
| Allocated | Approved budget of contributing projects, prorated by shares. |
| Forecast | Same, on forecast budgets. |
| Actual | Same, on actuals (expenses and valued timesheets). |
| Balance | Envelope − Allocated. Red when negative (over-allocated objective). |
| Consumption | Actual ÷ Allocated. Green ≤ 90 %, orange 90-100 %, red > 100 % (same thresholds as the portfolio budget). |
| Achievement | The objective's progress (see the computation). The 👤 icon flags an achievement observed by the owner. |
| Projects | Number of projects contributing to the objective. |
The per-project detail
Each objective expands down to its contributing projects (greyed rows with the 💼 icon, collapsed by default to keep the committee view readable). A project row shows:
- the project's share on this objective (badge, e.g.
60 %) — a split project appears under each objective with its partial amounts: "P2: €300k" under A1 is 60 % of its budget, not its total; - the allocated, forecast and actual amounts prorated by the share — project rows sum exactly to the parent objective's amounts;
- the project's progress (Achievement column) — the raw material of the computed achievement: you immediately spot the project dragging an objective down;
- an Open the project link to complete the committee → project journey.
Envelope, balance and consumption stay empty at this level (meaningless for a project). The snapshot history stays at objective level.
The columns above describe the Cost mode (default). In Revenue or Margin mode, the amounts and the reading change — see The three financial modes.
The three financial modes
The mode is chosen in Definition & members → Financial mode. It does not change the split mechanics (shares, sum per objective): it changes the family of amounts displayed and the reading of the envelope.
Where the amounts come from
A project's Budget module values costs and revenue separately (approved, forecast, actual for each). Tracking rolls both families up; the mode selects what is displayed:
| Mode | Displayed amount | Project example (approved) |
|---|---|---|
| Cost | costs | €500k of budgeted charges |
| Revenue | revenue | €700k of budgeted turnover |
| Margin | revenue − cost, column by column | 700 − 500 = €200k of budgeted margin |
The share applies the same way: a project attached at 60 % brings 60 % of its cost in Cost mode, 60 % of its revenue in Revenue mode, 60 % of its margin in Margin mode. The Σ roots = Σ projects reconciliation stays exact in all three modes.
The envelope reading inverts
| Cost mode | Revenue and Margin modes | |
|---|---|---|
| The envelope is… | a spending cap | a target to reach |
| Balance column | Balance = envelope − allocated | Remaining = target − actual |
| Rate column | Consumption = actual ÷ allocated | Realisation = actual ÷ target |
| Colour codes | green ≤ 90 %, orange 90-100 %, red > 100 % (exceeding is bad) | green ≥ 100 %, orange 90-100 %, red < 90 % (exceeding is good) |
| Negative balance | red (budget overrun) | green (target exceeded) |
Example in Margin mode
Objective A carries a €500k margin target for 2026. Two projects contribute at 100 %:
- P1: actual revenue €600k, actual cost €450k → actual margin €150k;
- P2: actual revenue €800k, actual cost €500k → actual margin €300k.
Objective A displays: actual margin €450k, remaining €50k (500 − 450), realisation 90 % — in orange: the target is close but not reached.
Two invariants, whatever the mode
- Achievement stays weighted by allocated costs. A margin can be negative: weighting progress by negative amounts would produce inconsistent results. The mode therefore only changes the financial columns, never the achievement computation.
- Snapshots photograph the mode. Each monthly snapshot records the active mode and both families of amounts: the history stays interpretable even after a mode change. Beware though, switching modes mid-year makes earlier curves non-comparable with the new ones.
The financial computation
1. Valuing each project
A project's amounts come from its Budget module — the same source as the Arbitration and Portfolio budget screens, for fully consistent figures:
- Allocated = sum of the project's approved (cost) budgets;
- Forecast = sum of forecast budgets;
- Actual = sum of realised lines, valued resource allocations included (days × rate).
All the project's budgets are summed, converted into the workspace currency.
2. Share-based split
Each contribution brings to its objective:
contributed amount = project amount × share / 100
3. Sum per objective
Each objective displays the sum of its contributions. On an inherited hierarchical plan, a parent adds its descendants' contributions to its own direct ones; weights play no part in the financials, euros simply add up.
Example
Objectives A1, A2 and B. Projects: P1 €800k → A1 at 100 %; P2 €500k → A1 at 60 % + A2 at 40 %; P3 €300k → B at 100 %.
| Objective | Allocated | Detail |
|---|---|---|
| A1 | €1,100k | 800 (P1) + 300 (60 % of P2) |
| A2 | €200k | 40 % of P2 |
| B | €300k | P3 |
| Total | €1,600k | = 800 + 500 + 300: the reconciliation is exact. |
If A1 carries a €2M envelope, its balance shows €900k.
The achievement computation
At objective level: the projects
Each contributing project's progress (the same as everywhere in FoxPlan, computed from its tasks) is averaged, weighted by the allocated amount of its contribution:
achievement(objective) = Σ (progress × contribution allocated)
─────────────────────────────────────
Σ (contribution allocated)
A €800k project weighs four times more than a €200k project in the objective's achievement. If no amounts are budgeted, the plain average of progress values is used.
Observed achievement prevails
If the owner has entered an observed achievement on an objective, it is displayed — the field's judgement prevails over the mechanics. Example: A1 computes at 80 %, but its owner observes that the real effect is only 20 % (projects finished, objective not reached); they enter 20, and 20 % is what shows.
On a plan created before August 2026 and carrying sub-objectives, a parent's achievement is still the average of its children's achievements weighted by their normalised weights (weights 60 and 20 → 75 % / 25 %; a sibling group with no weights → equal split; a child without a weight among weighted siblings is excluded). A parent carrying both children and direct projects combines the two components prorated by their allocated amounts, and an observed achievement rolls up to the ancestors. New plans being flat, this computation applies to those legacy plans only.
The charts
- Cost × achievement per objective — one bubble per objective: allocated amount horizontally, achievement vertically, bubble size representing the fiscal year's envelope. This is the arbitration tool: an over-endowed objective that does not deliver stands out immediately (big bubble, right side, bottom).
- Achievement history — each objective's achievement across the monthly snapshots.
The chart button in the toolbar hides or brings back both charts at once, to give the grid the full height. The choice is kept on your profile: you find the screen as you left it, from one device to the next.
Snapshots and scheduling
The Tracking figures are recomputed live on every display. To build a history (the curves above), FoxPlan periodically freezes a photo of the plan: amounts and achievement of every node, with their names and envelopes at that time.
The principle: one snapshot per month and per plan
- A new snapshot within the same month replaces that month's snapshot — the last state of the month prevails.
- Names and envelopes are copied into the snapshot: the history stays readable even if an objective is later renamed or deleted.
Manual snapshot
The Take a snapshot button (plan owners only) freezes the current state — typically right before a committee, to pin the presented figures.
Automatic snapshot: the role of scheduling
A scheduled job runs server-side so the history builds itself without any action on your part:
- Every hour, the server walks through workspaces and their strategic plans.
- For each plan without a snapshot for the current month, it takes one, flagged as "automatic". In practice: the first pass after the 1st of the month photographs each plan's state.
- The computation runs on behalf of the plan's first owner, with the same formulas as the screen — the automatic snapshot and the display show the same figures.
Two safeguards make the job safe:
- Idempotence: the existence of the month's snapshot is enough to skip it — no duplicates, even after a server restart.
- Instance lock: when several servers run in parallel, a lock (per plan and per month) guarantees a single one takes the photo.
There is nothing to configure: the history starts with the first snapshot (manual or automatic) and grows by one point per month. Take a manual snapshot at the end of the month if you want the monthly photo to reflect a precise state (after timesheets are updated, for instance): it will replace the job's one.