The first class of week 4. About 45 minutes of
teaching — roughly 15 on roles, 18 on one story walked live in the example
repository, 10 on Phase 2 (the delivery note, the checklist, how it is read)
— then Quiz 3 in the last ten minutes. Everything here should be usable at
the Phase 2 delivery. The agent-safety material has moved to a reading on the course
site; it is not taught from the front today.
Say the timing out loud so nobody is surprised by the quiz: it runs in the last
ten minutes of this class. The middle part is the one to watch closely — it is
the loop every team will repeat dozens of times from Phase 3. The third part
is the one most teams need: what a finished Phase 2 looks like, and the
checklist to take away.
The roles were introduced in week 1 as a list of artifacts. Today they are a
chain: each role's output is someone else's input. Repeat the note — a Data Lead
is not the only person who touches data, and a Build Lead is not the only person
who builds. Every member still builds at least two stories end to end each sprint.
The spec says the Client Lead is the only person who accepts a story, and is
expected to reject some. A Client Lead who has never rejected anything is not
doing the job. At the end of each phase the Client Lead also saves a copy of the
story list into docs/backlog.md.
If asked who accepts a story the Client Lead built themselves: another member
checks the criteria with them.
The prototype is built in Gemini Enterprise, opened in a browser and committed to
the repository. Its value after Phase 2 is consistency: as five people add
features, somebody has to notice when the fifth screen looks like a different
application.
This one is written down in how-we-work.md: the schema changes only in a pull
request that both sides of the feature read. Nobody changes a column quietly
because their half was easier that way — and that includes the Data Lead. Seed
data is invented; no real client names or phone numbers.
The Build Lead owns that it runs, not all the code in it. The temptation for a
strong Build Lead is to become the team's merge button; the patterns slide comes
back to that. "Nobody merges their own work" is one of the three collaboration
rules and has no role exception.
Six-member teams only; at five it is combined with FinOps. The Quality Lead
works on the running application, not on the code — use the system the way a
user would and write down what breaks.
The ledger lives in the repository and is committed, not kept elsewhere.
AGENTS.md tells the assistant never to edit docs/finops-ledger.md — it is written
from what the team saw, not generated. It is scored as present or absent, which is exactly why it gets left to the
last night.
The delivery note lives at docs/delivery-notes/phase-N.md and says what was
delivered, who did what, and links to the stories. The tag is made on GitHub:
Releases, Draft a new release, type phase-2, Create new tag, target main,
Publish. Anything merged after the tag belongs to the next phase.
Walk the chain once with a story from the room. Each arrow is an artifact: an
issue, a prototype screen, a table with a policy, a merged pull request at the
public address, a bug issue, a ledger line, and the Client Lead's acceptance.
The loop closes at the Client Lead, where it started — the person who wrote the
story is the person who says it is done.
All four have already appeared this semester; name none of the teams. Each one
breaks the record: an empty role means an artifact nobody owns; one reviewer
means four members with no review activity to show; a mismatched role set means
the ledger or the bug issues have no owner; and a row or signature entered by
someone else is not that person's work. If your activity cannot be seen in the
repository, you did not participate — and the reverse holds too: activity
entered for you is not yours.
Close Part 1 here. This settles the question from the first two weeks: "nobody
merges their own work" now has a named person on the other side — the reviewer
who approved. It is not a role; it is whoever took the review. Every member
reviews some pull requests, so every member merges some. A reviewer's comment
is visible activity in the repository; a team where one person does all the
reviewing has one member with evidence of review and the rest with none.
The publishing guide on the course site says the same.
Switch to the browser: github.com/isom472-fall2026/example-team. Do every step
live, on screen, and leave each slide up for a few seconds before switching so
the room has the step in writing. About 25 minutes for Part 2 in total.
Open the template live. Point at the "Who is building this" field and assign the
issue to that person, so nobody picks it up twice. Do not put a prefix or your
own number in the title — GitHub gives the number, and two people inventing
their own will collide. "Works well" is not a criterion; "loads in under two
seconds" is.
Create the branch in GitHub Desktop: Current branch, New branch, type the name,
based on main. Publish it. The most common version of "I lost my work" in week 5
is someone building a story on the wrong branch.
Make two small commits live in GitHub Desktop and show both on the website with
the author's photo. The fix for the grey icon is in setup.md, step 3. The agent
may commit; it may not push, open the pull request, or merge — those acts are the
student's, because they are the record.
Push, then open the pull request from GitHub Desktop or the banner on the
website. The template fills itself in; show the three parts. Point at the
reviewer section at the bottom: the author never writes in it. Opening the pull
request requests a review from every other member automatically.
Log in as a second account for this step. "Looks good" is not a review; "Opened
the page, signed up with a new email, saw the confirmation, read signup.js" is.
If Approve is greyed out on someone else's pull request, that member has not
accepted the repository invitation — it is in their email and at
github.com/notifications.
Tick the criteria in the issue as they are checked. Rejection is normal and
expected; say which criterion failed, in the issue, so the builder knows what to
change.
Before the merge the story is not yet at the public address, so the Client
Lead checks it on the builder's screen; after the merge, check it again live
and reopen the issue if it fails there.
Merge live, as the reviewer account, and switch to the Issues tab to show #14
closed, then the board. Wait a minute and open the public address so the room
sees it arrive. The board and the git log are compared at every phase; a board
that lies is worth less than no board.
Whether the board moves the card by itself depends on how the board is set
up; if it does not, move it by hand.
All six are from this semester's repositories; name no team. The closed pull
request is the costly one — the work looks finished on the board and never
reached main. It can be reopened, which is worth showing if there is time. The last row is the one to dwell on: an approval with no words is a click, not
a review, and from Phase 3 the review text itself is read.
The note is the deliverable most often left to the last night. It is the cheapest deliverable in the phase and the one that makes
every other one findable; a reviewer who cannot find the schema from the note
treats it as not delivered. "Present from it" settles what the delivery talk
contains — the session format is on the course site, deliverables page.
Heading 1 is "what was decided", not "what was delivered", because in Phase 2
nothing runs yet. From Phase 3 the same heading reads "what works now that did
not work before". The template file in the repository says the Phase 3
version; write the Phase 2 version under it. Heading 5 is where honesty earns
something: a note that says "we have 31 stories, the floor is 40, the other
nine are issues #33–#41 opened without criteria and are Phase 3's first job"
is a better note than one that hides it.
Read the first paragraph aloud: it is four sentences and it tells you the
whole design. Point at the table: every member wrote stories and every member
is assigned two. That is the split, and it is what the individual mark reads.
The team and the system are invented; the charity is the one used in the
proposal example on the course site.
Section 5 is the one most often missing from a delivery note. It is
not a confession; it is the Phase 3 plan. The full example is on the course
site under the deliverables page.
Leave this up for a full minute. The last slide before the quiz sends every
team back to it with their own repository open. The owner
column is who I ask when the row is missing, not the only person who works on
it. Three rows ask for things the repository template does not contain, so
teams make them by hand: the Assignee is set with the control on the right of
the issue, a typed name is not a split; the two schema files are new files the
Data Lead creates, db/ does not exist yet; the "when a value is missing" line
is a criterion written into the story. "Example persona deleted" is literal: a
persona file that still contains the shop supervisor from the template has not
been started. The two schema rows answer the question one team asked this
weekend: both files, and the document is not a copy of the SQL — it says what
the SQL cannot. The tag row is spelled out because two teams tagged Phase 1
with a capital P. The same table is on the course site, deliverables page.
"Three levels" is the whole rubric design: students can self-assess it
against the checklist in under ten minutes. The site shows the levels; read
from there. The last line is the same rule as Phase 1.
The two components are published; their weights are not. The quiz that follows
each sprint is on the sprint's own work.
Two minutes, not more. Point at the checklist row by row and ask the room to
answer the two questions for their own team on the way out. Say once that
building before the personas and stories exist is doing the last step first;
the order the rubric reads is story, criteria, schema, screens.
Run Quiz 3. Four items, answered in order; the open item is last.