Appendix E. Work-Log Template
The work log has one row per work session, all semester, starting in Chapter 2. Two of its columns are written before the work: the estimated hours, and your prediction with how sure you are. Those two make it a calibration instrument rather than a diary. Chapter 2 (Section 2.4.3) uses the confidence column to measure calibration; Chapter 19 (Section 19.1.3) uses the hours columns to correct estimates.
Keep the log in worklog.md in your course folder and commit the prediction before you run anything or ask the tutor (Setting Up Your Workbench). A prediction committed before the transcript that followed it is a record no one has to take on faith.
E.1 The fields
Table E.1. One row of the work log.
| Field | What to write | When |
|---|---|---|
| Date | Day and week | Before |
| Task | Lab, PA part, or function | Before |
| Estimated hours | Your number, not the agent's | Before |
| Phase and roles | Tutor, Pair or Team; each role used | Before, updated after |
| Prediction before asking | What you predict, and "I was __% sure" | Before any agent or run |
| Actual hours | Clock time, including audit and rework | After |
| Result | Right, wrong, or partly right, with one phrase why | After |
| Defects and instruments | Each defect, and what found it | After |
| Prompts | How many prompts you sent, all sessions | After |
Listing E.1. The work-log card (one per session in worklog.md).
## <date>, week <n>: <task>
Estimated hours (before): <h>
Phase: <Tutor/Pair/Team> Roles: <...>
Prediction (before asking): <claim>
I was <__>% sure.
Commit with prediction: <hash>
-- after --
Actual hours: <h>
Result: <right/wrong/partly> Why: <one phrase>
Defects: <defect> found by <instrument>; ...
Prompts used: <n> Transcripts: <files>
E.2 A filled example row
A composite row, as Priyanka might write it during PA2; not a real student. Numbers are illustrative.
Table E.2. One filled row.
| Field | Entry |
|---|---|
| Date | Week 6, Thursday |
| Task | PA2: rlist_remove_at, all four edge cases |
| Estimated hours | 1.5 |
| Phase and roles | Tutor; Drill maker, then Tutor |
| Prediction before asking | "Removing index 0 of a one-node list leaves head NULL and size 0; my four tests pass under ASan." I was 70% sure. |
| Actual hours | 2.25 |
| Result | Partly right: the one-node case passed; removing the head of a two-node list did not |
| Defects and instruments | Head pointer updated after the node was freed: ASan heap-use-after-free in my two-node test; fixed by saving next before free |
| Prompts | 4 (three drill items, one tutor question with my hypothesis) |
E.3 The calibration line
At the end of each PA, add one line computed from that PA's rows: average confidence against hit rate. Count "partly right" as a miss unless you wrote down in advance which part you were predicting.
Listing E.2. The calibration line for one PA (composite).
PA2 calibration: 9 predictions, average confidence 76%,
hits 6 of 9 (67%). Overconfident by 9 points.
Most misses: edge cases at the head of a list.
Change: predict each edge case separately.
Section 2.4.3 works one by hand: ten predictions averaging 75% confidence with six hits is 60%, overconfident by 15 points. The aim is not high confidence or low confidence; it is confidence that matches your hit rate, and a log that shows the gap narrowing.
E.4 The estimate line
At the end of each PA, also record estimated against actual hours. Chapter 19 turns these into a ratio that corrects the next estimate.
Listing E.3. The estimate line (composite).
PA2 hours: estimated 7.0, actual 9.5, ratio 1.36.
Recent ratio (PA1, PA2): (6.5 + 9.5) / (5.0 + 7.0)
= 1.33.
Overrun: audit and rework, not writing.
Section 19.1.3 shows the method on a semester of rows: compute the overall ratio, then the recent ratio from the last three PAs, and multiply your own raw estimate (never an agent's) by the recent ratio, with the best and worst ratios as the range. Tag hours by activity (spec, delegation, audit, rework, defense) when you can; Maya's PA6 log showed generating code was the smallest part.