Reproducible research workflows

talk
r
python
Slides from a talk at AMS Institute on research workflows: project organization, version control, dependency management, and literate programming
Author
Talk given

January 29, 2026

I gave my talk at the AMS Institute to research fellows at our all-hands meeting.

My old workflow went like this. Writing in Word, summary stats copied out of Excel, regression estimates and figures made in Stata or QGIS and pasted in by hand. Five or more tools and formats, and every number in the paper copied at least once. Then, say, Reviewer #2 wants one threshold changed, and you are staring at analysis_v3_FINAL.do next to final_final_draft.docx, trying to remember how you cleaned the data months ago.

Sound familiar?

My objective was to show colleagues that there is a better workflow, and how to adopt it slowly until it becomes a habit. I also wanted to emphasize literate programming: a single source of truth makes a research project highly reproducible, with the code and the prose intertwined, no hardcoded stats, and no copy-pasting of stuff.

I organized the talk around four pillars.

  1. Project organization: A self-contained repo per project, with data, code, and outputs together. Separate raw data from processed data, and write docs, a README. For a cumulative dissertation, each chapter can be a git submodule, but I used separate repos.
  2. Version control with Git & GitHub: Use Git for tracking your work (code, prose, or docs). Use it even as a single author, with GitHub or locally.
  3. Dependency management: Our analysis depends on specific package versions, and package updates can break our code. It does not work on my machine! uv (Python) and renv (R) for recording versions of packages for cross-machine use.
  4. Literate programming: Code, results, and narrative in one document: no copy-paste errors, and results update automatically.

I discussed literate programming with Quarto in detail because it encompasses the other three and is highly relevant for reproducibility.

Note

The reproducibility crisis is real. See the Data Colada posts on the Gino case. It may take you down, from earning $1M+ a year to a pleb! :D Journals and reviewers increasingly ask for code and data.

One source but several output formats:

flowchart LR
  project["project/
  ├── data/
  │   ├── raw/
  │   └── processed/
  └── code/
  #nbsp;   ├── download_data.py
  #nbsp;   └── clean_data.R"]

  project --> article["article.qmd"]
  project --> seminar["internal-seminar-2026.qmd"]

  article -->|render| html["HTML"]
  article -->|render| pdf["PDF"]
  article -->|render| docx["Word"]

  seminar -->|render| revealjs["reveal.js slides (HTML)"]
  seminar -->|render| beamer["Beamer slides (PDF)"]
  seminar -->|render| pptx["PowerPoint slides"]

  %% mermaid trims leading spaces in a label, so the code/ children start with #nbsp;
  classDef tree text-align:left,font-family:monospace,white-space:pre
  class project tree
Figure 1: Write in Markdown, embed R or Python, render to HTML, PDF, Word, or slides.

I demoed Quarto with trends of WOZ property values across Dutch municipalities. Load data from CSV, make exploratory plots, run a regression with inline results, add cross-references and citations, and render to HTML and PDF.

Slides, with the WOZ demo and the talk repo.
Dissertation chapters: housing supply elasticity, the German donut effect, and Addis Ababa gradients.

—— Thank you for stopping by! 💚💛❤️ ——