Twelve Weeks of Data Into a Portfolio
"Submit your transformation portfolio" sounds like homework: a document you sit down and write once the real work is finished. It isn't that, and believing it is that is the last place this course wants to lose you before Lesson 12. You already assembled it. One appended line at a time, every Friday, without ever intending to.
The log file already is most of the portfolio
Open transformation-log.jsonl at Week 12 and look at what's sitting there: twelve lines of JSON, one per week, each written the day it happened by the same script from Lesson 3, refusing the same guard conditions Lesson 3 walked through. Nothing about that file changes shape for graduation. It isn't a staging area for something you assemble later. It is the artifact itself, because its design never required a translation step to become one.
Consider what a separate document would demand instead. Opening twelve entries, deciding what to summarize, deciding what to cut, formatting it for a stranger's eyes, probably paraphrasing raw numbers into something that reads more finished than automation_index: 58.14. Every one of those steps is a chance to smooth the story into something tidier than what actually happened. The log skips all of it by already sitting in a shape nobody needs to dress up: automation index climbing from wherever Week 1 landed, hours reclaimed against that same fixed baseline, recurring revenue moving toward the 50% mark Lesson 4 named. A reader can trace any figure back to the exact entry that produced it, because the file never stopped being the source of truth Lesson 3 built it to be.
transformation-log.jsonl, unedited, plus the collected automated_this_week and biggest_bottleneck sentences from all twelve entries read in order. That's the whole thing. Nothing gets built from scratch at Week 12.
Why it's shareable without a single real dollar in it
This is the part worth sitting with before you hand anything to anyone: a completed twelve-week log can go out exactly as it sits on disk. Lesson 4 covered the mechanism, so this won't re-derive it, but the payoff belongs here specifically. revenue_ratio was never a dollar figure. It was a float compared to your own Week 1, and Revenue Efficiency Multiple's formula never touches an absolute number at any step. Whatever you're about to submit, hand to a prospective client, or post somewhere public was safe to share the moment each line got written. Nothing needs redacting before graduation, because there was never a field to redact.
Someone who has never seen your books still gets the full shape of the transformation from that file: how far the automation index climbed, how many hours came back against a fixed baseline, how the recurring-revenue share moved. What they don't get, and never could, is your actual revenue. That trade is the whole design, not a limitation you're working around at submission time.
The two sentences you already wrote are the narrative
Lesson 9 named this directly: the automated_this_week and biggest_bottleneck sentences feed no formula, and reading them together across weeks turns a table of figures into a story nobody had to construct after the fact. Lesson 5 showed the mechanism in miniature, four weeks deep: onboarding named as the constraint in Week 1, still the constraint in Week 2, replaced by reporting in Week 3, replaced by sales follow-up in Week 4. Twelve weeks of those same pairs, read start to finish, is that same effect at full length, a chain of problems named, solved, and displaced by whatever surfaces next, in your own words, captured the moment each one was true.
That's the second half of the deliverable, worth pulling into its own view before you submit, precisely because it's easy to skim past buried inside a JSONL file. Read all twelve automated_this_week lines in order, then all twelve biggest_bottleneck lines in order. You're not hunting for a formula. You're looking for the sequence of real constraints getting cleared, one at a time, in the order they actually happened.
Twelve short sentences, each set down the day it happened. Read them straight through as a list.
The same span, but the constraint side. Watch for repeats: a line that names the identical problem two or three entries running is itself data, the same way it played out in Lesson 5's four-entry run.
This is the narrative a reader actually wants. The automation index shows how much moved. These two lists show what moved, and in what sequence.
Why real entries beat one written from memory at graduation
Here's the honest comparison, worth stating plainly rather than treating as a minor stylistic preference. A record built from twelve entries logged as the weeks happened carries a kind of credibility that one reconstructed from recollection after the fact cannot fake, because it was captured in the moment, not pieced together afterward to look tidy.
Think back to Lesson 3's guidance on Week 1: answer from memory, not from a spreadsheet you have to go build first, because a rough honest figure typed today beats a precise one reconstructed three weeks late. Writing the whole program up after the fact is that same failure mode, stretched from a single entry across an entire run. Sitting down at graduation and typing "the constraint back then was probably reporting, I think" isn't a report of what actually happened. It's a guess, dressed to read like a record, produced by someone who already knows how the story ends and is unconsciously smoothing the path toward it. That's the felt-versus-measured problem Lesson 1 opened this whole course with: in METR's randomized controlled trial, those developers believed they were 20% faster while running measurably slower, because remembering how something went is not the same instrument as clocking it while it happens. Rebuilding a run from recollection carries the identical flaw, for the identical reason.
A log kept week by week sidesteps that trap, because there was no ending to smooth toward when each line got typed. An entry from partway through names what was actually slow right then, set down by someone with no idea yet what later stretches would hold. That's not a stylistic difference. It's the gap between a measurement and a memory, the exact distinction this whole program exists to teach.
| Logged week by week | Written from memory at graduation | |
|---|---|---|
| When each entry was set down | The Friday it happened | Weeks or months after the fact |
| What the writer knew at the time | Only what had happened so far | The full ending, already known |
| Risk of unconscious smoothing | None; there was nothing yet to smooth toward | High; the story gets shaped to fit how it turned out |
| What a skipped stretch looks like | A visible gap in the log | Invisible, filled in with a plausible guess |
A gap from a skipped entry, the failure mode Lesson 9 named directly, doesn't get fixed by inventing a plausible-sounding line for it at graduation. That's not a correction. It's the same recollection problem in miniature, shrunk from twelve weeks down to one. An honest record with an acknowledged hole beats a complete-looking one with a fabricated stretch sitting inside it.
What you're actually submitting
Not a new document. transformation-log.jsonl, exactly as it sits once Week 12's line lands, plus the twelve constraint-and-automation pairs read together as the story those figures tell. If you've been honest since Week 1, the record has been assembling itself, one Friday at a time, for three months. Your only remaining job is reading it whole instead of one row at a time.
Reading the whole file back is the same command from Lesson 5 and Lesson 9, run once more:
python3 .claude/skills/transformation-tracker/scripts/report.py --tableThat prints all twelve rows in one table, the same format shown across four weeks in Lesson 5 and repeated in Lesson 9. Nothing about submission needs a different tool than the one you have already been running every Friday.
The portfolio is done the moment Week 12 is logged. Lesson 12 closes the course with a concrete plan for starting your own real Week 1 on Monday morning.
Reply here and it goes straight to Rod. Same as replying to one of his emails.