Research data management for software projects
Most research software exists to turn input data into output data,
yet data is routinely the least managed part of the project: undocu-
mented CSVs, 2GB files in git, results nobody can regenerate. Treat
data as a first-class research output with the same care as code -
versioned, documented, licensed and citable. FAIR applies to data
even more directly than to software (rseng-fair-software covers the
software side; the principles at go-fair.org are the shared root).
Project layout and the data/code boundary
- Separate raw, intermediate and final data explicitly - e.g.
data/raw/, data/processed/, results/ - and treat raw data as
READ-ONLY: nothing ever edits a raw file in place; all cleaning is
scripted so the pipeline can regenerate everything downstream
(rseng-workflows).
- Keep the mapping from data to code explicit: which script produces
which file, recorded in the workflow or a Makefile, not in memory.
- Configuration, not hard-coded paths: data locations belong in a
config file or environment variable so the project runs outside
its author's laptop (rseng-reproducible-environments).
Keeping data out of git - but versioned
Git is for text; repositories bloat permanently with every committed
binary revision. Before a large or binary data file lands in git,
intervene:
- Small, stable reference data (kilobytes, test fixtures) may live in
the repository - that is fine and convenient.
- For everything else use a data versioning layer: DVC or git-annex
track content by hash in git while the bytes live in ordinary
storage; DataLad builds full dataset management on git-annex and is
widespread in neuroscience and beyond. All three keep code and data
revisions linked, which is the actual requirement: "which data did
commit X use?" must have an answer.
- Published, frozen inputs are often best NOT copied at all: record
the DOI or URL plus a checksum, and fetch in a scripted step.
- Git LFS exists but suits media assets better than evolving research
data; hosting quotas bite and history stays coupled to one forge.
Documenting a dataset
A dataset without documentation is a puzzle, not a resource. Minimum
per dataset:
- A README (or datasheet) stating: what the data is, how it was
collected or generated, its units, coordinate systems and
conventions, known limitations, license, and how to cite it.
- A data dictionary for tabular data: every column's name, type,
units, allowed values and meaning. Generate it from the data where
possible so it cannot drift silently.
- Formats: prefer open, well-specified formats (CSV with a stated
dialect, Parquet, HDF5, NetCDF, domain standards) over proprietary
ones; for domain metadata standards and format registries, point
users to FAIRsharing and the ELIXIR RDMkit rather than inventing a
schema ad hoc.
Depositing, DOIs and citation
Data that supports a publication belongs in a data repository, not in
supplementary ZIPs or the code repo:
- Zenodo is the general-purpose default (free, DOI per version,
versioned records); domain repositories are better when one exists -
RDMkit and FAIRsharing list them per field.
- Give the dataset its own DOI and its own citation entry; link data
DOI and software DOI both ways so each cites the other
(rseng-citation-metadata, rseng-publishing-releasing).
- License the data explicitly - and note that code licenses do not
fit data well: CC0 or CC-BY are the common choices for open data,
while ODbL and domain-specific terms exist for databases
(rseng-licensing). "No license" means "all rights reserved", for data
exactly as for code.
Sensitive and personal data
When data involves people, patients, protected locations or
commercial restrictions:
- Never commit sensitive data, even briefly - git history is forever
and forges cache aggressively. Add ignore rules and pre-commit
guards BEFORE the first sensitive file exists in the project.
- Keep sensitive data in the access-controlled storage the
institution provides; the repository carries only synthetic or
anonymized samples plus the code that ran on the real thing.
- Anonymization is a research task, not a rename: removing names is
not de-identification. Route the user to their data steward or
ethics board rather than improvising GDPR compliance.
- A data management plan (DMP) may already govern the project - ask;
when one exists it decides storage, retention and sharing, and the
software should implement it rather than contradict it. Writing and
maintaining DMPs is rseng-data-management-plans.
Records and transparency
When AI assistance produced or transformed datasets, record it in the
project's AI declaration - dataset entries are a supported content
type in aidecl.yaml (rseng-ai-declaration). Data provenance and AI
provenance are the same habit applied to different artifacts.
Working with this skill
This skill is source-independent: its authority is the FAIR data
principles and the community resources linked below.
Learn more (verified):
Related skills
Check whether any of these applies before moving on:
- rseng-archiving - long-term data deposit
- rseng-citation-metadata - data DOIs and two-way citation
- rseng-data-management-plans - funder plan over the practice
- rseng-regulatory-compliance - sensitive and personal data obligations
- rseng-scientific-file-formats - choosing and engineering the format
- rseng-workflows - scripted regeneration of derived data
1---2name: rseng-data-management3description: Covers research data management around software: organizing and documenting datasets (layout, data dictionaries), keeping data out of git while versioning it properly (DVC, git-annex, DataLad), FAIR data and metadata standards, depositing data with DOIs in repositories such as Zenodo, licensing data, and handling sensitive or personal data. Use PROACTIVELY when a project reads or produces datasets, when the user asks where to put data, how to version or share large files, how to document a dataset, which data license or repository to use, or when data files are about to be committed to a code repository. (Format engineering - HDF5, NetCDF, Parquet, chunking - is rseng-scientific-file-formats; funder data management plans are rseng-data-management-plans.)4license: CC-BY-4.05---67# Research data management for software projects89Most research software exists to turn input data into output data,10yet data is routinely the least managed part of the project: undocu-11mented CSVs, 2GB files in git, results nobody can regenerate. Treat12data as a first-class research output with the same care as code -13versioned, documented, licensed and citable. FAIR applies to data14even more directly than to software (rseng-fair-software covers the15software side; the principles at go-fair.org are the shared root).1617## Project layout and the data/code boundary1819- Separate raw, intermediate and final data explicitly - e.g.20 data/raw/, data/processed/, results/ - and treat raw data as21 READ-ONLY: nothing ever edits a raw file in place; all cleaning is22 scripted so the pipeline can regenerate everything downstream23 (rseng-workflows).24- Keep the mapping from data to code explicit: which script produces25 which file, recorded in the workflow or a Makefile, not in memory.26- Configuration, not hard-coded paths: data locations belong in a27 config file or environment variable so the project runs outside28 its author's laptop (rseng-reproducible-environments).2930## Keeping data out of git - but versioned3132Git is for text; repositories bloat permanently with every committed33binary revision. Before a large or binary data file lands in git,34intervene:3536- Small, stable reference data (kilobytes, test fixtures) may live in37 the repository - that is fine and convenient.38- For everything else use a data versioning layer: DVC or git-annex39 track content by hash in git while the bytes live in ordinary40 storage; DataLad builds full dataset management on git-annex and is41 widespread in neuroscience and beyond. All three keep code and data42 revisions linked, which is the actual requirement: "which data did43 commit X use?" must have an answer.44- Published, frozen inputs are often best NOT copied at all: record45 the DOI or URL plus a checksum, and fetch in a scripted step.46- Git LFS exists but suits media assets better than evolving research47 data; hosting quotas bite and history stays coupled to one forge.4849## Documenting a dataset5051A dataset without documentation is a puzzle, not a resource. Minimum52per dataset:5354- A README (or datasheet) stating: what the data is, how it was55 collected or generated, its units, coordinate systems and56 conventions, known limitations, license, and how to cite it.57- A data dictionary for tabular data: every column's name, type,58 units, allowed values and meaning. Generate it from the data where59 possible so it cannot drift silently.60- Formats: prefer open, well-specified formats (CSV with a stated61 dialect, Parquet, HDF5, NetCDF, domain standards) over proprietary62 ones; for domain metadata standards and format registries, point63 users to FAIRsharing and the ELIXIR RDMkit rather than inventing a64 schema ad hoc.6566## Depositing, DOIs and citation6768Data that supports a publication belongs in a data repository, not in69supplementary ZIPs or the code repo:7071- Zenodo is the general-purpose default (free, DOI per version,72 versioned records); domain repositories are better when one exists -73 RDMkit and FAIRsharing list them per field.74- Give the dataset its own DOI and its own citation entry; link data75 DOI and software DOI both ways so each cites the other76 (rseng-citation-metadata, rseng-publishing-releasing).77- License the data explicitly - and note that code licenses do not78 fit data well: CC0 or CC-BY are the common choices for open data,79 while ODbL and domain-specific terms exist for databases80 (rseng-licensing). "No license" means "all rights reserved", for data81 exactly as for code.8283## Sensitive and personal data8485When data involves people, patients, protected locations or86commercial restrictions:8788- Never commit sensitive data, even briefly - git history is forever89 and forges cache aggressively. Add ignore rules and pre-commit90 guards BEFORE the first sensitive file exists in the project.91- Keep sensitive data in the access-controlled storage the92 institution provides; the repository carries only synthetic or93 anonymized samples plus the code that ran on the real thing.94- Anonymization is a research task, not a rename: removing names is95 not de-identification. Route the user to their data steward or96 ethics board rather than improvising GDPR compliance.97- A data management plan (DMP) may already govern the project - ask;98 when one exists it decides storage, retention and sharing, and the99 software should implement it rather than contradict it. Writing and100 maintaining DMPs is rseng-data-management-plans.101102## Records and transparency103104When AI assistance produced or transformed datasets, record it in the105project's AI declaration - dataset entries are a supported content106type in aidecl.yaml (rseng-ai-declaration). Data provenance and AI107provenance are the same habit applied to different artifacts.108109## Working with this skill110111This skill is source-independent: its authority is the FAIR data112principles and the community resources linked below.113114Learn more (verified):115 - https://www.gofair.foundation/fair-principles - the FAIR principles116 - https://rdmkit.elixir-europe.org - ELIXIR RDMkit, per-domain and117 per-task RDM guidance118 - https://fairsharing.org - registry of metadata standards and119 data repositories120 - https://zenodo.org - general-purpose data repository with DOIs121 - https://dvc.org - Data Version Control122 - https://www.datalad.org - DataLad dataset management123124<!-- related-skills:begin -->125126## Related skills127128Check whether any of these applies before moving on:129130- rseng-archiving - long-term data deposit131- rseng-citation-metadata - data DOIs and two-way citation132- rseng-data-management-plans - funder plan over the practice133- rseng-regulatory-compliance - sensitive and personal data obligations134- rseng-scientific-file-formats - choosing and engineering the format135- rseng-workflows - scripted regeneration of derived data136137<!-- related-skills:end -->