CP3405 Design Thinking 3 · TR2 2026 · Course Week 8

Sprint 8 — System Hardening + Demo Prep

vW30 · Due Sprint Day 7 · 23:59 SGT (Sunday) Presentation · Sprint Day 8 (Monday) R2 is under the spotlight this sprint Scrum · Agile · AI Tools · TR2 2026
Sprint8 · W8
Tag RequiredvW30
DeadlineSprint Day 7 · 23:59 SGT
PresentationSprint Day 8 (Mon)
Sprint focusR2 · Scrum Master

🛠️ The System Hardening Problem

"By Sprint 8, your pipeline should not need you anymore for the parts you built in Sprint 3. If it still does, that's not a feature gap — that's unfinished automation."

Sprint 7 tested whether your team could run a professional Scrum cycle. Sprint 8 tests something different: whether the system you built can survive contact with reality without a human quietly patching it every week.

One real example from this cohort: a team hit an LLM API rate limit mid-pipeline last week. They didn't panic and they didn't rebuild anything — they simply switched to a non-rate-limited model and kept moving. That's the standard for Sprint 8. Not "never hit a failure" — recover from failure without a fire drill.

Sprint 8 exists to get every team there. Minimal human intervention is the centrepiece of this sprint. Every role's work this sprint should be judged against one question: if you were unavailable this week, would the pipeline still run?

What a Hardened Pipeline Looks Like — And Why Most Aren't There Yet

The dangerous thing about an unhardened pipeline is that it looks fine right up until the week something breaks and nobody's around to fix it by hand. The question to ask isn't "did it run this week" — it's "what happens the week it doesn't?"

The Manual Patch Pattern — a hardening failure

Monday: pipeline runs fine.
Tuesday–Thursday: an API call fails silently, or returns malformed data.
Friday: someone notices the output looks wrong, opens the code, patches it by hand.
Saturday: pipeline runs again — because a human intervened, not because the system recovered.

This is not resilience. This is a human pretending to be the system's error handling. A hardened pipeline catches the same failure automatically — retries, falls back, or flags it clearly — without anyone opening an editor.

The Minimal-Intervention Test — this sprint's primary accountability

By the end of Sprint 8, your team should be able to answer yes to each of these:

• Did this week's prediction run without anyone manually editing a data file or re-running a failed step?
• If an API call failed or returned bad data, did the pipeline handle it — retry, fallback, or a clear error — rather than silently producing wrong output?
• Could someone unfamiliar with your code trigger the whole pipeline from one command or one GitHub Actions run?
• Has your team started assigning who presents which segment on Demo Day?

If the answer to any of these is no, that's exactly what Sprint 8 is for. Sprint 9 is the final sprint, not a scramble to finish hardening.

What "minimal intervention" looks like in practice

It doesn't mean no humans ever touch the system. It means the weekly prediction cycle — fetch data, run agents, synthesize, score — completes without someone babysitting each step. A team member reviewing and approving the output before it's posted is expected. A team member manually re-running a crashed step or hand-fixing a data file every week is the thing to eliminate this sprint.

The Dependency Chain — Why Order Matters

Every pipeline has a strict execution order. Violating it does not just delay one step — it collapses the entire sprint into Sunday night.

R3 Almanac
R4 Macro
R5 Technical
R8 LLM Synthesis
R7 Human Score
R9 Tag vW30

R8 cannot start until R3, R4, R5 have all committed. R7 cannot apply the Wild Card until R8 has logged all LLM responses. R9 cannot cut the tag until R7 has committed the final prediction. One missing link collapses the entire chain.

R2's job is to watch this chain. Not on Sunday. From Monday. The moment any link looks uncertain, R2 acts.

What R2 says when a link is at risk

"R3 — your Almanac output needs to be committed by Wednesday noon. R8 is blocked until it lands. If something is stopping you, tell me now and we'll solve it together. If you need to swap the role with someone else this sprint, we can do that too."

That conversation on Tuesday takes two minutes. The equivalent conversation on Saturday takes two hours and produces a worse result.

What to Submit by Sprint Day 7 · 23:59 SGT (Sunday)
1
Pipeline ran automatically
GitHub Actions triggered after Sprint Day 5 (Friday) US market close — Saturday morning SGT. Run log is the evidence.
2
Release tag vW30
Exact format: lowercase v, capital W, two digits. The immutable record that the sprint was sealed on time.
3
R2 mid-week check-in committed
New this sprint. R2 must commit a standup_midweek_W30.md by Wednesday (Sprint Day 3) showing all roles checked in and any blockers surfaced. This is assessed.
Standing Scrum Obligations — Still Enforced

The following are R2's mandatory deliverables this sprint. Each is assessable. Each must be committed to the repository with a timestamp that proves it happened before the stated deadline.

Day 1 (Mon)
Sprint Planning facilitated. Sprint goal written by R1 and committed. All roles confirmed. DoD checklist agreed. Pipeline dependency order reviewed with the team — every role knows who depends on them and by when.
Evidence: sprint_goal_W30.md committed before end of Monday. Discord sprint goal post timestamped.
Day 3 (Wed) ⚠️
Mid-week check-in — the new mandatory artefact. R2 contacts every role member individually (Discord DM or standup note). Confirms: started / not started / blocked. Any blocker escalated same day. Result committed as standup_midweek_W30.md.
Evidence: standup_midweek_W30.md committed by Wednesday 23:59 SGT. Must name every role and their status. Blockers must include R2's response action — not just acknowledgement.
Day 4 (Thu)
Agent outputs confirmed committed. R2 verifies R3, R4, R5 have all committed their outputs before R8 begins LLM synthesis. If any agent is missing, R2 acts immediately — escalates, reassigns, or negotiates scope reduction. Does not wait.
Evidence: Commit timestamps on agent files. If any were late, R2's standup_midweek_W30.md should have flagged it Wednesday.
Day 6 (Sat)
All branches merged. R2 confirms R9 has merged all branches before end of Saturday. Merge conflicts discovered Sunday cannot be resolved in time.
Evidence: GitHub branch merge timestamps visible on pull request history.
Day 8 (Mon) ⚠️
Sprint 8 retrospective presented. R2 leads the retrospective section of the Monday presentation. Must answer specifically: when did blockers surface this sprint? How many days earlier than Sprint 7? What one process change made the difference?
Evidence: retrospective_W30.md committed before Sunday midnight. Must reference the mid-week check-in and whether it caught anything.
Sprint Cadence — With SM Checkpoints
WhenWhat happensR2's responsibility
Day 1 (Mon) SPRINT PLANNING
Sprint goal, roles, DoD, dependency order reviewed.
Facilitate. Ensure every role knows who depends on them. Commit sprint goal today.
Tue–Wed EXECUTION + CHECK-IN
R3–R5 agent work. R8 wires API calls. R6 confirms Friday fetch scheduled.
Contact every role individually by Wednesday. Not a group message. Each person, each role status. Commit standup_midweek_W30.md by Day 3 (Wed):59.
Day 4 (Thu) SYNTHESIS GATE
R8 cannot run LLMs until R3, R4, R5 have all committed. This is the dependency gate.
Confirm all agent outputs are committed before R8 starts. If not — escalate immediately, not tomorrow.
Sat morning SGT AUTOMATED FETCH
GitHub Actions collects Sprint Day 5 (Friday) US closes. No manual action needed if pipeline works.
Monitor that the fetch ran. If it failed — R2 surfaces it to R9 immediately.
Day 6 (Sat) HUMAN REVIEW
R7 Wild Card. R9 merges all branches. R10 delta scoring begins.
Confirm all branches merged by end of Saturday. Chase R10 if delta scoring hasn't started.
Day 7 (Sun) · 23:59 SPRINT SEALED
vW30 tag cut. Discord submission posted. Retrospective committed.
Confirm all DoD items checked. R2 signs off before R9 cuts the tag.
What Changes From Sprint 7
Still in effect: Mid-week check-in is a graded artefact

standup_midweek_W30.md committed by Wednesday (Sprint Day 3) 23:59 SGT is mandatory. It must name every role, confirm their status, and document any blockers with R2's response action. A check-in that says "everyone is fine" with no specifics does not count.

🆕 New: Demo role assignment begins

By the end of Sprint 8, every team must have assigned which role presents which pipeline segment on Demo Day. Sprint 9 is the final sprint — it should not start with "who's presenting what" still undecided.

🆕 New: System story drafted

Start writing the narrative you'll present on Demo Day: Level 1 in Week 1 → where you are now. What changed, what broke, what you learned fixing it. This does not need to be polished this sprint — it needs to exist so Sprint 9 is refinement, not a first draft under pressure.

Sprint 8 Roles — Hardening Checklist by Role
R2 · Scrum Master
This sprint's focus role
Mid-week check-in mandatory. Contact every role individually by Wednesday. Commit standup_midweek_W30.md. Open Monday presentation. Lead retrospective. Surface blockers before Sunday.
Blockers surfaced Wednesday can be solved. Sunday cannot.
R1 · Product Owner
Sprint Goal + DoD
Write sprint goal Monday. DoD checklist must include mid-week check-in and Wednesday agent commit deadline as explicit items.
R3 · Almanac
→ Research Analyst
Commit output by Wednesday. R8 is blocked until you do. R2 will check on Tuesday. Have something to show.
R4 · Macro
→ Macro Analyst
Commit output by Wednesday. Key macro events for this sprint week. R2 will check on Tuesday.
R5 · Technical
→ Data Analyst
Technical read from Sprint Day 6 (Saturday) close (post Sprint 7 fetch). Commit before Wednesday.
R6 · Data
→ Data Engineer
Add all 11 sector ETFs to fetch. Confirm Friday cron scheduled for Sprint Day 5.
R7 · Human Score
→ Senior Analyst
Wild Card must be sourced and specific. Review all LLM outputs. Apply override if warranted. This is the primary marks differentiator.
R8 · LLM Operator
→ AI/ML Engineer
Cannot start until R3, R4, R5 committed. Call at least 2 LLMs via API. Save responses as files. Build comparison table.
R9 · GitHub Lead
→ DevOps Engineer
Own the Friday cron. Merge all branches Saturday. Cut vW30 tag before Sunday midnight. Show Actions log Monday.
R10 · Calibration
→ Product Analyst
Score vW30 against Saturday Sprint Day 7 actuals. Build cumulative accuracy W3–W8. delta_W30.md committed before tag.
Sprint 8 Timeline
SPRINT DAY 1 — SPRINT PLANNING (MONDAY)
Sprint 8 opens · Dependency order reviewed
Sprint goal committed. Every role knows who waits on them. DoD includes Wednesday agent deadline.
SPRINT DAY 3 — SM MID-WEEK CHECK-IN ⚠️ (WEDNESDAY)
R2 contacts every role individually
standup_midweek_W30.md committed by 23:59. Blockers surfaced and acted on today — not Sunday.
SPRINT DAY 4 — SYNTHESIS GATE (THURSDAY)
R3 + R4 + R5 must be committed · R8 starts
LLM API calls run. Comparison table committed. R10 begins delta_W30.md.
SPRINT DAY 6 ~4AM SGT — AUTO FETCH (SATURDAY)
⚡ Pipeline collects Friday Sprint Day 5 US closes
github-actions[bot] commits timestamped data file. No human involvement.
SPRINT DAY 6 — HUMAN REVIEW (SATURDAY)
R7 Wild Card · All branches merged
R9 merges everything by end of Saturday. R2 confirms DoD checklist.
SPRINT DAY 7 · 23:59 SGT — SPRINT SEALED (SUNDAY)
🏁 vW30 cut · Discord posted · Retrospective committed
delta_W30.md committed. R2 signs off DoD. R9 cuts tag. Done.
SPRINT DAY 1 (MON) — SPRINT REVIEW
R2 presents first · Mid-week check-in reviewed
R2 opens with blocker timeline. Did they surface Wednesday or Sunday? Show the evidence.
Discord Submission Template — Sprint 8 · vW30

Post in your team channel before Sunday Sprint Day 7 (Sunday) 23:59 SGT.

TEAM: Team __ / Practical __
SPRINT: 8 · vW30
GITHUB REPO:
RELEASE LINK:

━━━ SM CHECK-IN (R2) ━━━
standup_midweek_W30.md committed by Sprint Day 3 (Wed): Y/N
Blockers surfaced mid-week: Y/N
If Y — what was the blocker and how was it resolved:
Did any dependency slip past Wednesday: Y/N
If Y — what will change in Sprint 8:

━━━ SPRINT GOAL ━━━
Our Sprint 8 goal was:
Did we meet it: Y / Partial / N

━━━ PREDICTION ━━━
File committed (prediction_W30.json or .md): Y/N
SPX direction + confidence:
NDX direction + confidence:
IWM direction + confidence:
All 11 sectors covered: Y/N
Human Score Wild Card applied: Y/N
Wild Card reasoning:

━━━ PIPELINE ━━━
Automated fetch ran Sat morning SGT: Y/N
GitHub Actions run URL:
All branches merged before tag: Y/N

━━━ AGENTS (all committed before R8 synthesis) ━━━
Almanac R3 committed by Wed: Y/N
Macro R4 committed by Wed: Y/N
Technical R5 committed by Wed: Y/N

━━━ AI SYNTHESIS ━━━
LLM 1 via API: Y/N · model:
LLM 2 via API: Y/N · model:
Responses saved as files: Y/N
Comparison table committed: Y/N

━━━ CALIBRATION ━━━
delta_W30.md committed: Y/N
vW30 SPX direction correct: Y/N · error %:
vW30 NDX direction correct: Y/N · error %:
vW30 IWM direction correct: Y/N · error %:

━━━ SCRUM HEALTH ━━━
retrospective_W30.md committed: Y/N
Every role R1–R10 ready to present Mon Sprint Day 8: Y/N
One thing R2 will do differently in Sprint 8:
Free LLM API Options — For Teams Hitting Limits

If your team is hitting rate limits or does not want to pay for API access, the following options are free, API-accessible, and capable enough for this pipeline. You do not need GPT-4 for market synthesis. You need consistent structured output — and all three options below deliver that.

Option 1 — Google AI Studio (Gemini 1.5 Flash) · Recommended

Cost: Free. No credit card required.
Limits: 15 requests/minute · 1,000,000 tokens/day — far more than a weekly pipeline needs.
Get your key: aistudio.google.com → Sign in with Google → Get API key → Create API key.
Model string: gemini-1.5-flash
Store as: GitHub Secret GEMINI_API_KEY

Option 2 — Groq (Llama 3.1 70B) · Fastest free option

Cost: Free. No credit card required.
Limits: 14,400 requests/day · 6,000 tokens/minute — effectively unlimited for a once-a-week pipeline.
Get your key: console.groq.com → Sign up → API Keys → Create API Key.
Model string: llama-3.1-70b-versatile
Store as: GitHub Secret GROQ_API_KEY

Option 3 — OpenRouter (multiple free models)

Cost: Free tier includes Llama 3.1 70B, Mistral 7B, Gemma 2 9B, Qwen 2.5 72B.
Get your key: openrouter.ai → Sign up → Keys → Create Key.
Model string: meta-llama/llama-3.1-70b-instruct:free
Store as: GitHub Secret OPENROUTER_API_KEY
Already used by Team A in this cohort — proven to work for this exact pipeline.

Why you are hitting rate limits — and how to stop

Rate limits are almost always caused by repeated testing — running the full pipeline manually multiple times during the week while developing. The fix is simple: test with short prompts and small inputs during development. Let the GitHub Actions workflow make the real call on Friday night. One call per model per sprint. Free tiers are designed for exactly this cadence — they are not designed for a developer calling the API 50 times in an hour.

Store your API key as a GitHub Secret (GEMINI_API_KEY, GROQ_API_KEY, etc). The workflow reads it from the secret. You never hardcode it in your script. You never paste it in Discord.

This section is for teams with API issues only

If your current API setup is working — keep it. These options are alternatives for teams who are hitting limits or do not want to pay. You do not need to switch if your pipeline is running correctly.

Sprint 8 Standing Reminders
The mid-week check-in is not a Discord message

Posting "hey everyone how are you going" in the team channel is not a mid-week check-in. R2 must contact each role member individually, confirm their specific deliverable, confirm its status, and document the result in standup_midweek_W30.md. The file must name each role (R3, R4, R5...) with a status line and any blocker. Generic check-ins score zero.

Agents must commit before R8 — no exceptions

This is the rule that Sprint 7 teams broke when dependencies collapsed. R8 synthesises what the agents have produced. If R8 synthesises without agent outputs — the synthesis is based on the LLMs' own knowledge, not your team's research. That is not a pipeline. That is prompt engineering. They are not the same thing.

Tag format: vW30 — still enforced

Lowercase v, capital W, two digits. W30, vw30, v1.0.0 all result in no credit for the release. Put it on the DoD checklist. Check it explicitly. Do not rely on memory.

The data domain is the training environment. Scrum is the lesson.

You are not being assessed on whether you predicted the market correctly. You are being assessed on whether your team ran a professional delivery cycle — planned, executed, reviewed, and retrospected — with a system that improves sprint over sprint. R2 is the role that makes that cycle work. Sprint 8 is R2's sprint.