Charts /
CH-TIM-02
CH-TIM-02 . family TIM
S-CURVE
line (cumulative S-curve). Needs: ordered periods + cumulative non-decreasing series (Actual key; Plan/Forecast context).
scheduleprogresschange-over-time
Use when
- cumulative progress vs plan over the project timeline
- schedule status reporting (the classic planning S-curve)
- any cumulative measure where the gap to plan IS the message
Do not use when
- non-cumulative period values (use CH-TIM-01 LINE)
- categorical comparison (use CH-RNK-01 or CH-MAG-01)
- more than 4 curves (plan, actual, forecast is the usual max)
See instead
- values are per-period, not cumulative: CH-TIM-01
Alternatives
- CH-TIM-08 (fan with uncertainty, planned)
Rules
- values are cumulative and non-decreasing; a dip means wrong data, not a style choice
- y starts at zero, always (an S-curve with a cut baseline lies about progress)
- Actual is the key series; Plan and Forecast are context
- series labeled at line ends, never a legend
- horizontal gridlines only
- the annotation names the gap or the inflection, anchored at the data
Never do this
- legend boxes
- truncated y axis to flatter progress
- plotting period values and calling it an S-curve
- markers on every point
- smoothed splines (the curve shape IS the information)
QA before delivering
- every series non-decreasing
- y axis starts at zero
- no legend anywhere
- series labels at line ends
- annotation present and anchored to a data point
- title states the gap with a number
- source line present bottom-left
Data shape
| title | string, action title stating the gap with a number |
| eyebrow | string caps, rendered only when the DL chrome asks for it |
| source | string, rendered bottom-left, always |
| unit | string, usually %, appears once, on the top y tick label |
| x | array of ordered period labels |
| series | array of {name, values cumulative non-decreasing, role: 'key'|'context'}, exactly one key (Actual); Plan and Forecast are context |
| annotation | {text, series, index, tx, ty, anchor}, names the gap or the inflection |
Sample data (golden)
{
"title": "Cumulative progress reached 63% in August, 9 points behind plan",
"eyebrow": "SCHEDULE . MONTH 8",
"source": "Source: sample dataset v1, 2026-07-12",
"unit": "%",
"x": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug"
],
"series": [
{
"name": "Plan",
"values": [
4,
10,
19,
30,
42,
54,
64,
72
],
"role": "context"
},
{
"name": "Actual",
"values": [
3,
8,
16,
26,
36,
46,
55,
63
],
"role": "key"
}
],
"annotation": {
"text": "slippage steady since May",
"series": "Actual",
"index": 5,
"tx": 520,
"ty": 330,
"anchor": "end"
}
}