← Course home · Sprint 9A brief · Scrum Scoreboard

Sprint 9B: Did our change work?

Sprint 9B runs from Tue 10 Nov to the Sprint Review in class on Mon 16 Nov. Sprint 10 repeats the same test on a second week and ends at Demo Day, Mon 23 Nov.

Sprint 9B goal: by Monday 16 Nov, every team can show, with its own locked numbers, whether the change it wrote down in Sprint 9A made its prediction better, worse or no different, and what it will do about it.

The idea in one minute

In Sprint 9A you measured how wrong your past predictions were and wrote down what you would change. Now you test that change.

The obvious test is: “Last week we were 3% off. This week, with the change, we were 1% off. It worked.” That test tells you almost nothing. This week might simply have been an easier week to predict, and you would have been 1% off anyway.

Think of a farmer testing a new fertiliser. Comparing this year’s harvest with last year’s proves nothing, because the weather was different. Planting two halves of the same field, one with the fertiliser and one without, does.

So this week you lock two predictions for the same Friday:

What it isFile
A · Old methodYour prediction made the way you made vW9, as if nothing had changed.predictions/vW10_old.json
B · New methodThe same prediction with your change applied.predictions/vW10.json
Baseline · Do nothingTuesday’s close, the last close anyone knows at the Wednesday lock. Your script adds it; you do not lock it.added by engine/check_error.py

All three face the same market on Friday 13 Nov. The change is the only difference between A and B, so if B lands closer to the close than A, the change gets the credit. The baseline asks the honest question every forecaster has to face: did all our analysis beat simply repeating the last close?

One week cannot prove a method. Markets are noisy: a change can win one week by luck and lose the next. That is why Sprint 10 runs the same test on a second week (vW11), and why your verdict on 16 Nov is “keep, adjust or drop for one more test”, not “proven”.

Where Sprint 9B fits: the Architecture Deep Dive

In the Architecture Deep Dive, Sprint 9A built Stage 6 (Delta Measurement): how far off you were. Sprint 9B completes Stage 7 (Prescriptions): a change, applied and tested. By Demo Day your system runs the whole loop: prediction → error → change → tested result.

Before you start: three things to fix

Sprint 9A results stay as they are on the scoreboard. These fixes are not re-scored, but Sprint 9B cannot work without them, because your vW10 errors are added to the same files.

Sprint 9B: your five milestones

Each milestone is one item in a fixed place by a fixed time, on main. The Scrum Scoreboard shows every team’s result and its actual work, exactly as in Sprint 9A.

Deadline (SGT)MilestoneWhereOwner
Tue 10 Nov, 23:591. Sprint 9B backlogYour team’s FigJam section and docs/backlog-9b.mdR1
Wed 11 Nov, 23:592. Your change, as rulesdocs/change.mdR2, R3, R4, R6
Wed 11 Nov, 23:593. Two vW10 lockspredictions/vW10_old.json and predictions/vW10.jsonR1 (locks), R2, R3, R4, R6
Sat 14 Nov, 23:594. A/B errors and chartdata/errors.csv (vW10 rows) and ui/index.htmlR4, R6, R5
Sat 14 Nov, 23:595. Did it work?docs/did_it_work.mdR2, R3, R4, R6

Mon 16 Nov: Sprint Review in class, using the Sprint 9B presentation template.

1. Sprint 9B backlog (FigJam + GitHub)

One card for each of milestones 2–5, each with an owner and a one-line “done” statement, in your team’s FigJam section. Copy the same cards into docs/backlog-9b.md and merge it into main by the same deadline. FigJam is where you work; the GitHub copy is what records the time.

2. Your change, as rules

In Sprint 9A each market owner named a change. Now write it as one rule per market that someone outside your team could apply without asking you. One rule only per market, so the A/B test can show what that rule did.

docs/change.md

## SPX
Rule: New-method SPX = old-method SPX reduced by our median SPX error
over vW4–vW9 (in %), because we were too high in 4 of those 6 weeks.
Uses only: Tuesday 10 Nov close, data/errors.csv (vW4–vW9).
Comes from: our SPX rows in data/errors.csv, too high in vW6–vW9.
Would stop working if: the market turns and rises for several weeks.

Each rule must:

If a market keeps its old method, write Rule: no change for it, and say why.

3. Two vW10 locks

Both files use exactly the Sprint 9A format: numbers only, no % signs, no actual closes. Both are locked by the same deadline, and the old-method file must not borrow anything from the new rule.

predictions/vW10_old.json                predictions/vW10.json
{                                        {
  "week": "vW10",                          "week": "vW10",
  "target_date": "2026-11-13",             "target_date": "2026-11-13",
  "SPX": 7400,                             "SPX": 7330,
  "NDX": 27100,                            "NDX": 26800,
  "GOLD": 4080,                            "GOLD": 4080,
  "TNX": 4.88                              "TNX": 4.84
}                                        }

Example numbers only. Here GOLD is the same in both files because that market’s rule was “no change”.

Typo check before you lock (R1). Compare every number in both files with Tuesday 10 Nov’s close. Anything more than 10% away is almost certainly a typo, like a yield of 4.15 when it was trading near 5.1. Fix it before 23:59: after the lock it stays as it is.

4. A/B errors and chart

Extend engine/check_error.py so that data/errors.csv gets three vW10 rows per market, one for each method, with a method column:

week,target_date,instrument,method,predicted,actual,error,unit
vW10,2026-11-13,SPX,old,7400,[Fri close],[..],pct
vW10,2026-11-13,SPX,new,7330,[Fri close],[..],pct
vW10,2026-11-13,SPX,baseline,[Tue close],[Fri close],[..],pct

Same rules as Sprint 9A: actual closes from Yahoo Finance (^GSPC, ^NDX, GCZ26.CMX, ^TNX), error = (predicted − actual) ÷ actual × 100 for SPX, NDX and GOLD, and in basis points for TNX. Rows vW4–vW9 have old in the method column.

Run the script after the Friday close. The US market closes on Friday at 16:00 New York time, which is about 05:00 SGT on Saturday 14 Nov. Run it any time on Saturday after that, and check that the vW10 actual dates say 13 Nov.

On ui/index.html, add one chart per market showing the three vW10 errors side by side (old, new, baseline) with a zero line, next to your Sprint 9A error charts.

5. Did it work?

In docs/did_it_work.md, one short paragraph per market (SPX, NDX, GOLD, TNX), each written by that market’s owner. Each paragraph must:

An honest “the change did not help” is a good result. The point is that your team can now tell.

How results are shown

Exactly as in Sprint 9A. Only main counts, at exactly the paths above, and arrival times come from GitHub’s own server record. Each milestone shows one result: ✅ On time, ⚠️ Late (with the time it arrived), or ❌ No submission. A result is fixed at its deadline and is not changed afterwards. The scoreboard updates shortly after each deadline: early Wed 11 Nov (milestone 1), early Thu 12 Nov (milestones 2–3) and early Sun 15 Nov (milestones 4–5). Your numbers appear only after the Wednesday lock has passed.

Path checklist (check on GitHub before each deadline)

MilestoneExact path on main
1docs/backlog-9b.md (plus your FigJam section)
2docs/change.md
3predictions/vW10_old.json · predictions/vW10.json
4engine/check_error.py · data/errors.csv · ui/index.html
5docs/did_it_work.md

Open each file on GitHub, on the main branch, before the deadline. A file in the right folder with the wrong name, or on another branch, does not count.

Who does what

RoleSprint 9B
R1 Product Owner & Scrum MasterBacklog on FigJam and in docs/backlog-9b.md (1). Typo check and both vW10 locks (3). Keeps the cards moving.
R2 Almanac & MacroSPX: rule (2), both numbers (3), paragraph (5).
R3 Technical & EconomicNDX: rule (2), both numbers (3), paragraph (5).
R4 Data & CalibrationMethod column and baseline rows in check_error.py (4). GOLD: rule, both numbers, paragraph.
R5 Human Score & UIA/B charts on the team page (4).
R6 LLM & GitHubRuns the script after the Friday close (4). Merges every branch into main on time. TNX: rule, both numbers, paragraph.

After Sprint 9B

Sprint 10 (16–23 Nov) repeats the same A/B test on vW11, using your keep/adjust/drop verdict, so Demo Day on Mon 23 Nov shows two weeks of results for every market.