Reproducibility is the foundation of trustworthy bioinformatics. In this note I share the pipeline conventions we now enforce in our lab.

Containerize everything

1
2
3
4
5
6
7
# docker-compose service snippet
services:
pipeline:
image: ghcr.io/our-lab/omics-pipeline:2026.09
volumes:
- ./data:/data
- ./results:/results

Every analysis runs inside a versioned container. Pin versions, not just package names.

Track data provenance

For each result file we record:

  1. Input data version (checksum or DOI)
  2. Pipeline commit hash
  3. Software versions (conda list --export)
  4. Random seed for every stochastic step

A minimal project layout

1
2
3
4
5
6
project/
โ”œโ”€โ”€ data/raw/ # never modified
โ”œโ”€โ”€ data/processed/
โ”œโ”€โ”€ src/ # pipeline code
โ”œโ”€โ”€ results/
โ””โ”€โ”€ report/

If a collaborator cannot reproduce your figure from this layout in one command, the pipeline is not done yet.