The tools we use and how they fit together. The through-line: every project has exactly one canonical home for each kind of artifact — code in the repo, math in Overleaf, state in the Project Landing Page (the project’s Google Doc, described below) — and everything links to everything else.
New projects start from the lab’s project template via GitHub’s “Use this template” button. The layout:
README.md — mirrors the Landing Page fields and links to the Doc and Overleaf project. If someone lands on the repo cold, the README tells them what the project is and where everything lives.R/ and python/ — analysis code. Use whichever fits the project; delete the one you don’t.simulations/ — simulation studies, one subdirectory per study, each with its own short README stating what question the study answers.data/ — gitignored. Contains only a README pointing to the canonical data location and access instructions. Data never lives in the repo.writing/ — LaTeX source, kept in sync with the Overleaf project. Ships with two manuscript skeletons (general-methods and estimand-driven causal — keep one) and lab-notation.sty, the shared notation preamble.renv.lock / requirements.txt — pin your environment from day one; future-you running a revision two years later will be grateful.scripts/ and .github/workflows/ — an renv bootstrap script and CI stubs that check the pinned environment restores and tests pass..github/PULL_REQUEST_TEMPLATE.md — every PR answers one question: what did this de-risk? (De-risking — attacking the biggest remaining uncertainty first — is defined in Starting a Project.)The single source of truth for project state: goal, milestones, open risks, and the accumulating weekly updates. Stamp a copy of the template when you start a project — see Starting a Project for the fields.
Mathematical formulations, estimand definitions, and eventually the manuscript live in Overleaf from day one. Use the shared lab notation preamble (lab-notation.sty, shipped in the template repo’s writing/ folder) so symbols mean the same thing across projects. Where the license supports it, link the Overleaf project to the repo’s writing/ directory via GitHub sync; otherwise, Overleaf is canonical and the repo README links to it.
Each project gets its own channel. Rapid iteration happens there — see Communication Rules for the norms.
I run Granola in Zoom meetings for AI-generated notes, shared to the project channel afterward. Norms and disclosure are covered in Communication Rules.