Refactoring MLGEO for 2026: audience-centered and personalization of textbooks through adverserial reviews
Yesterday I sat down with the MLGEO Jupyter Book, the machine learning for geoscience course I teach at the University of Washington and that we built over several years under the GeoSMART project. The course was good in 2024. In 2026 it read like a time capsule: heavy on implementation details students no longer need to hand-code, silent on agents and evaluations, and carrying the small inconsistencies that accumulate when a course is written by many hands across many quarters. The rubric had drifted from the table of contents, assignments referenced datasets two chapters out of date, and the notation changed mid-book.
I refactored the whole thing in half a day and many, many tokens.
The course now opens with where AI actually sits in science today, teaches concepts over implementation, and adds agents and evaluations as topics in their own right. The core did not move, because it is still right: AI-ready datasets, classic machine learning, and deep learning. Classic ML in particular stays, because logistic regression and random forests remain the cleanest place to teach what training a model means (loss, generalization, overfitting, validation) before the abstractions of deep learning and then of foundation models bury those ideas under scale. What changed is the framing around that core, updated to how these tools are used now. This is a very similar pattern to my project for ESS 314 (LINK BACK TO OTHER BLOG POST) and using genAI to update and refactor course material is becoming routine.
The mechanism: define audience first, then ensemble adversarial review
The sequence mattered more than any single prompt.
Step 1: define the intended audience. Before touching any content, I wrote down who this book is for: graduate students and advanced undergraduates in the geosciences, comfortable with Python, not assumed to have taken a formal ML course. This document became the anchor for everything downstream. Every later judgment (is this chapter too implementation-heavy? is this MCQ well aligned with content?) resolves against the target audience.
Step 2: build reviewer personas. From that audience definition I generated twelve personas to review the book adversarially. Here are a few examples:
- Postdoc in hydrogeology, two years past PhD. Models groundwater flow and recharge in data-sparse basins; funded on a project that promised “physics-informed machine learning” in the proposal, so she must now actually deliver a PINN-or-similar that beats MODFLOW calibration on sparse well data. Teaching herself ML at night; mentors two grad students who assume she already knows it.
- Third-year PhD student in civil engineering, flood-risk group. Builds ML surrogates for hydrodynamic flood models and works with a city stormwater utility. His results feed design decisions with legal and safety consequences, so his standards for uncertainty and validation come from engineering practice, not ML papers.
- Full professor of structural geology and field mapping at a mid-size state university. Advises MS and PhD students who increasingly want ML projects (mineral classification from thin sections, landslide susceptibility mapping). She is not going to become a programmer — she needs to supervise ML work credibly and decide what her department should require of students.
- Postdoc in computer science; PhD in NLP (evaluation and robustness of language models, two EMNLP papers on benchmark contamination). Just joined an AI-for-science institute and is embedded with Earth scientists for the first time. Reads this book to learn the domain norms — and can’t help reviewing the ML content like a conference reviewer.
Each persona read the book from its own position and filed its own critique. The critiques are not always right. Their value is that they surface disagreements I would not come up with alone, and they surface them before the students take the class. Adversarial review by designed personas has become my default way of working, in code, in science ideas, and in writing.
Step 3: refactor against the critiques. With the audience document and twelve critiques in context, the actual restructuring was fast. This is where “concepts over implementation” got enforced chapter by chapter, and clearly shifted the focus of the 2026 edition compared to the 2024 edition.
Step 4: rebuild the assessments. This step went further than I had planned. Every assignment got remade as multiple-choice questions that are self-consistent with the actual course: each question traceable to a specific section, distractors built from the misconceptions the personas flagged. MCQs give up open-ended reasoning, and I would only accept that trade because the capstone now carries the open-ended load. My old paper-reading assignment (read these papers, summarize them) became a three-stage arc: start from an AI-generated literature review and critique; develop your own standard for what best practice looks like in an ML-for-geoscience paper; then write your own agent that adversarially reviews your final project against the standard you wrote. The students end the quarter doing to their own work what I did to the course. Besides, I always have to justify and argue to get a TA for this class and thus get ready for a refusal for this year.
Step 5: translate. La cerise sur le gâteau: I translated the book into French and Spanish, again with personas reviewing and revising the translations. We write science in English, and that will not change soon. But I can tell you as a French native speaker that understanding in one’s first language is more direct; the concepts arrive without an extra translation layer running in the reader’s head. A book that took years to write in one language now exists in three, and can be read by students I will never meet.
The human fine tuning that was still necessary
The most useful critique came from inside the persona panel. One persona was defined as a French CS faculty member, and it objected to the French translation itself: over-Frenchizing the terminology, it argued, would not reflect how the French ML community actually speaks, which mixes French prose with English technical terms as a matter of professional culture. Translating machine learning into apprentissage automatique everywhere is formally correct and culturally wrong. The persona was right, and the point generalizes: translation transcends the language into cultural difference. A translated course has to match how a community actually talks.
One caveat is that I used some Fable 5, some Opus 5 1M (when I ran out of weekly usage credits). After all of these adversarial review, there was definitely some french that felt wrong. So I asked Codex GPT5.6 Sol for an additional review, dumped it in a MD, sent it back to Claude VsCode to submit GH issues, solve them, PR, review PR from Copilot, then merge. This was an additional step that proves that automated workflows are not perfect - yet.
The honest accounting of “lessons learned” is that I mostly knew them already. The capability did not surprise me. What the exercise confirmed is the shape of the work: the model did the labor, and the decisions that made the labor worth doing came before the first content prompt — the audience definition, and the standards the reviews and the MCQs are held against.
Final thoughts
Adversarial review is becoming a default research skill. The cost of getting twelve structured critiques of anything (a course, a codebase, a paper draft, a half-formed idea) has dropped to roughly the cost of asking. Once critique is that cheap, the skill that matters is designing the critics: choosing whose perspectives to simulate, and knowing which of their objections deserve a human’s attention. One part of this is context engineering applied to judgment, and I now spend more time on it than on drafting. The second part is obviously human: who is the audience? what are there scientific and cultural values? Only by meeting them in person and exchanging these concepts will we be able to, together, define our personas. Cultural values may change, people desire change, so I would not consider “cultural identity” as a static label and rubric to obey, but we can at least version control our personnas.md.