A WNS that improves from -0.10 to -0.04 looks like progress. If part of it came from lowering a margin, the design has not improved by that part. Normalising each run to the baseline margin shows the real trend.
runs = [("r1", 0.20, -0.10), ("r2", 0.18, -0.05), ("r3", 0.18, -0.04)] # (run, total margin ns, WNS ns)
base_margin = runs[0][1]
norm = {r: round(w + (m - base_margin), 3) for r, m, w in runs} # WNS as if the baseline margin had been kept
raw_gain = runs[2][2] - runs[0][2]
real_gain = norm["r3"] - norm["r1"]
assert norm == {"r1": -0.10, "r2": -0.07, "r3": -0.06}
assert round(raw_gain, 3) == 0.06 and round(real_gain, 3) == 0.04
margin_part = round(raw_gain - real_gain, 3)
assert margin_part == 0.02
print("PASS: raw WNS gain", round(raw_gain, 3), "ns; real gain", round(real_gain, 3), "ns; from margin cuts", margin_part, "ns")Run | Total margin (ns) | Reported WNS (ns) | WNS at baseline margin (ns) |
|---|---|---|---|
r1 | 0.20 | -0.10 | -0.10 |
r2 | 0.18 | -0.05 | -0.07 |
r3 | 0.18 | -0.04 | -0.06 |
From r1 to r3 the reported WNS improved by 0.06 ns. Of that, 0.02 ns is simply the margin being reduced from 0.20 to 0.18 ns; the real improvement from design work is 0.04 ns. Neither number is wrong: the first is what the signoff will see if the new margin is approved, the second is what the design did. A dashboard that shows both prevents arguments.
Margin changes appear as events on the trend, with the owner who approved them.
WNS and TNS trends are shown at the baseline margin as well as at the current one.
Margin increases are treated as risk reduction, and decreases as a decision needing approval, not as progress.
-0.08 + (0.22 - 0.20) = -0.06 ns, the same as r3: the apparent worsening comes from the larger margin, not from the design.