Back to blog
6 min readWorkflow / Reproducibility

A Small System for Reproducible Work

Reproducibility begins with ordinary habits: stable inputs, named runs, visible decisions, and results that can explain where they came from.

Reproducibility is often discussed as an infrastructure problem. Tools matter, but a large part of reproducible work comes from a smaller question: can a result explain where it came from?

Give every run an identity

Temporary folders such as final, final-new, and final-2 record emotion rather than history. A useful run name identifies time, purpose, and possibly the configuration variant.

For example:

runs/
  2025-09-08_baseline-small/
  2025-09-09_window-ablation/

The naming scheme does not need to be universal. It needs to remain stable within the project.

Keep inputs beside decisions

A result depends on more than data. It also depends on configuration values, preprocessing choices, random seeds, and code state. I store a copy of the resolved configuration inside each run directory rather than assuming the current project configuration is unchanged.

Short decision notes are equally valuable. A one-line explanation of why a threshold changed can prevent a later reader from treating the change as accidental.

Separate raw evidence from interpretation

Raw outputs should remain untouched after a run completes. Tables, selected examples, and figures can be generated into a separate results directory.

This separation makes the analytical path visible:

  1. inputs and configuration produce raw evidence;
  2. analysis code transforms that evidence;
  3. figures and summaries communicate an interpretation.

If a figure looks surprising, it is then possible to inspect each boundary without rerunning everything immediately.

Make failure part of the record

Failed runs are often deleted, even when they contain the clearest evidence about unstable assumptions. I keep a lightweight failure note containing the command, configuration, error, and next decision.

This prevents repeated mistakes and makes later success more informative. The final method is easier to understand when we can see which alternatives did not work.

Prefer a small manifest

A machine-readable manifest can connect the pieces:

run_id: 2025-09-09_window-ablation
code_revision: 4f21c8a
config: config.toml
raw_output: raw/metrics.json
summary: results/summary.csv

It does not replace documentation. It gives documentation a stable index.

Closing note

A reproducible workflow does not need to capture everything. It needs to preserve the decisions and evidence required to explain a result. Start with named runs, frozen configurations, untouched raw outputs, and visible failures. More elaborate infrastructure can be added when the project actually demands it.