Planning research software: management plans and technology choice
Use this skill at the start of a research software project, or whenever a
project's direction needs to be captured or revisited: drafting a Software
Management Plan (SMP), reviewing one against community standards, or choosing
the language, frameworks, and infrastructures to build on. It covers management
planning and technology choice.
Tailor the rigor to the software's type and intended lifespan - do not push a
throwaway prototype through the full governance apparatus of long-lived
infrastructure.
What a Software Management Plan is
An SMP is a living document that plans how software will be developed,
maintained, shared, and preserved, capturing key decisions early and updating
them as the project evolves. Frame it
to the user as guidance embedded in the process, not a one-off deliverable.
It exists to serve five concerns; name the ones that matter for the project:
- Reproducibility and reusability: the software can be reliably reproduced,
verified, and reused by others.
- Funding and milestones: funders can see the development strategy and track
progress against it.
- Community standards and best practices: code review, continuous
integration, testing, documentation standards, and FAIR4RS principles are
planned in, not bolted on.
- Accessibility: the software is discoverable, accessible, and usable by the
wider research community.
- Credit and impact: how contributors are acknowledged (citation files,
ORCID, authorship), how usage is tracked, and how impact is evaluated.
Tailor the SMP to the software (do this first)
Not all software is created equal.
Before drafting sections, classify the software and set its priorities:
- Place it on the pack's three-tier view: exploratory analysis code, reusable
research software, or long-lived research software infrastructure. Higher
tiers warrant more rigor, formality, and investment.
- Set the primary quality goals from the tier. For analysis code, prioritise
reproducibility, transparency, and provenance. For infrastructure,
prioritise robustness, scalability, security, and long-term maintenance.
- Make these priorities explicit in the plan so the team spends effort where
it delivers the most value, rather than applying every practice uniformly.
- Check for external constraints early: institutional policy, national
guidelines, or funder requirements often dictate the required level of
detail and may mandate open release.
SMP section checklist
A plan should systematically cover these foundational aspects. Walk them in order when drafting or
reviewing, and record decisions rather than intentions:
- General information: what the software does, who owns it, its scope and
intended longevity.
- Collaboration and licensing: contribution model, governance, and license
choice (defer license specifics to the licensing skill).
- Analysis: requirements and the problem the software addresses.
- Design: architecture and key technical decisions.
- Implementation: coding standards, secure development workflow, and the
languages and tools chosen (see the technology-choice rules below).
- Testing and quality assurance: automated testing, continuous integration,
and code review.
- Deployment and delivery: how the software reaches its users.
- Versioning and releases: versioning scheme, release cadence, archiving.
- Long-term maintenance: resource needs, governance model, and contingency
plans - succession of maintainers, deprecation and end-of-life strategy.
- Credit, accessibility, and impact: citation, discoverability, registries,
and how impact is measured and communicated.
Two cross-cutting checks:
- Engage all relevant stakeholders - architects, developers, researchers,
legal advisors, community managers - so responsibilities are shared and
understood and the plan is actually adopted. Consider user support,
documentation, community contributions, onboarding, and governance.
- Plan for integration with development platforms (GitHub, GitLab) and
research registries and archives (Software Heritage, Zenodo, bio.tools,
OpenEBench) so the plan is straightforward to put into practice.
Keep the SMP alive
Treat the SMP as a living document, not a start-of-project formality:
- Revisit it at lifecycle transitions and whenever a major decision changes.
- Prefer a tool that produces both human-readable output (for stakeholders
and reviewers) and machine-actionable output (for automated workflows,
metadata extraction, or compliance checks) when the project needs it.
- Build on established templates and checklists rather than inventing a
format - the ELIXIR SMP template and the Software Management Wizard offer
guided, low-barrier starting points; the SSI checklist helps evaluate
coverage. See references.md for the vetted set.
Machine-actionable SMPs and platform workflows
SMPs are becoming structured data, not prose PDFs. When the user's
institution runs a planning platform, draft THERE (or produce
paste-ready content): the Data Stewardship Wizard builds plans from
questionnaire knowledge models and exports funder formats plus
machine-actionable output; DMPonline carries the major funder
templates whose software sections an SMP feeds. A structured plan is
checkable - promised repositories can be diffed against actual
deposits, promised licenses against LICENSE files, promised archiving
against archive records (rseng-archiving).
Drafting workflow for an agent: for an existing project, read the
repository first - license, CI, tests, CITATION.cff, README - and
write the plan that is TRUE, flagging gaps as planned improvements
with owners rather than papering over them. For a new proposal,
draft from intended practices with this pack's standards as the
default, concrete over aspirational ("unit tests in CI on every
merge", not "high quality standards"). Version the plan in the
repository so changes are reviewable history; revisit at releases
and reporting deadlines, and run a drift check - a plan that says
"Zenodo archiving" while nothing is archived is a liability at
review time. The data twin is rseng-data-management-plans; write the
two consistently and cross-reference them. Record AI assistance in
drafting in aidecl.yaml (rseng-ai-declaration).
Choosing languages, tools, and infrastructures
Distinguish the three kinds of choice before advising: the programming language (the
main medium, affecting functionality, readability, and pace); tools and
frameworks (reusable abstraction layers for a domain, e.g. web, ML,
workflows); and infrastructures (broader knowledge-oriented techniques such
as databases, GPU/FPGA programming, or ML). The considerations below apply to
all three unless noted.
Decision rules
Weigh social factors alongside technical ones - technical merit alone does
not predict a project's success:
- People and community: prefer what is already used widely in the field, for
interoperability and reusability (the I and R in FAIR). Draw on existing
practices, and on expertise available at your institute - a nearby expert
who can coach you is invaluable.
- Personal and team expertise: account for what the team already knows and
prefers; factor in project partners' preferences, not just your own.
- Language and ecosystem fit: does it offer the features and frameworks you
need and save time; is it expressive enough for the design; is it not
overkill or too complicated for the purpose?
- Deferring the choice: if undecided, design modularly and hide a choice
behind an abstraction layer so the rest of the application is not tied to
its specifics and the decision can change later.
Match the choice to the lifecycle stage
Three situations impose different constraints:
- Rapid prototyping: personal preference weighs most - use something you know
or want to try. If you know no language yet, Python is a good default.
- Starting a new development project: apply the full set of considerations
above, balancing feature, social, and personal factors.
- Joining an existing project: you are usually constrained by the existing
languages and frameworks; switching either is a big, infrequent decision.
New technology may be exactly why you were brought in - social
considerations still apply within those constraints.
Good default languages
Opinionated but proven starting points:
- Python: prototyping, gluing code together, data analysis, ML; easy to start
and widely adopted across scientific communities.
- C++: high performance, compiled, strongly typed, multi-paradigm.
- JavaScript/TypeScript: anything with a serious web component, and UI for
non-web applications.
- R: statistical analysis, especially social sciences and medical research.
- Fortran: computationally intensive numerical simulation and HPC.
- Modern, smaller-ecosystem choices: Julia (mathematical modelling, elegant
semantics, JIT-compiled) and Rust (high performance, safety-first).
- Special purpose: CUDA/OpenCL for GPU programming; shell scripting (Bash,
PowerShell) for text processing, environment setup, and simple pipelines.
Get off to a flying start with templates
After choosing, do not scaffold by hand - reach for community-curated
templates:
- Templates bundle current best practices ready to use, and contributing back
multiplies the effort for future users. Prefer research-software-specific
boilerplate, which covers aspects generic tools miss.
- Concrete starting points: the Netherlands eScience Center Python template,
BestieTemplate.jl for Julia, and usethis for R packages.
- IDE snippets and AI assistants offer lighter-weight help (inline templates,
autocompletion) and are worth using, but full project generators give a
stronger, best-practice-aligned starting structure.
Working with this skill
The generated references.md beside this file lists the source material
and pointers:
- references.md - verified Learn more pointers
Learn more (verified):
Related skills
Check whether any of these applies before moving on:
- rseng-archiving - preservation promises need archiving mechanics
- rseng-data-management-plans - drafting the data twin plan
- rseng-licensing - plan's licensing section needs specifics
- rseng-maintenance-sustainability - planning the long-term maintenance section
- rseng-project-kickoff - brand-new project starts with interview
- rseng-project-scaffolding - template kickstart after language choice
1---2name: rseng-management-planning3description: Covers planning research software work: writing and maintaining a Software Management Plan (SMP), and choosing programming languages, tools, and infrastructures for a project. Use when the user wants to write or review an SMP, plan how software will be developed, maintained, shared, and preserved, needs the software sections of a proposal or funder template, wants to decide which language or framework to start a project in (Python, C++, R, Julia, Rust, Fortran, JavaScript), pick a project template or boilerplate, or weigh reuse, sustainability, and funder requirements at the start of a project. (Data management plans, maDMPs, DS-Wizard and DMPonline are rseng-data-management-plans; interactive new-project setup is rseng-project-kickoff; week-to-week task tracking is rseng-project-tracking.)4license: CC-BY-4.05---67# Planning research software: management plans and technology choice89Use this skill at the start of a research software project, or whenever a10project's direction needs to be captured or revisited: drafting a Software11Management Plan (SMP), reviewing one against community standards, or choosing12the language, frameworks, and infrastructures to build on. It covers management13planning and technology choice.14Tailor the rigor to the software's type and intended lifespan - do not push a15throwaway prototype through the full governance apparatus of long-lived16infrastructure.1718## What a Software Management Plan is1920An SMP is a living document that plans how software will be developed,21maintained, shared, and preserved, capturing key decisions early and updating22them as the project evolves. Frame it23to the user as guidance embedded in the process, not a one-off deliverable.2425It exists to serve five concerns; name the ones that matter for the project:2627- Reproducibility and reusability: the software can be reliably reproduced,28 verified, and reused by others.29- Funding and milestones: funders can see the development strategy and track30 progress against it.31- Community standards and best practices: code review, continuous32 integration, testing, documentation standards, and FAIR4RS principles are33 planned in, not bolted on.34- Accessibility: the software is discoverable, accessible, and usable by the35 wider research community.36- Credit and impact: how contributors are acknowledged (citation files,37 ORCID, authorship), how usage is tracked, and how impact is evaluated.3839## Tailor the SMP to the software (do this first)4041Not all software is created equal.42Before drafting sections, classify the software and set its priorities:4344- Place it on the pack's three-tier view: exploratory analysis code, reusable45 research software, or long-lived research software infrastructure. Higher46 tiers warrant more rigor, formality, and investment.47- Set the primary quality goals from the tier. For analysis code, prioritise48 reproducibility, transparency, and provenance. For infrastructure,49 prioritise robustness, scalability, security, and long-term maintenance.50- Make these priorities explicit in the plan so the team spends effort where51 it delivers the most value, rather than applying every practice uniformly.52- Check for external constraints early: institutional policy, national53 guidelines, or funder requirements often dictate the required level of54 detail and may mandate open release.5556## SMP section checklist5758A plan should systematically cover these foundational aspects. Walk them in order when drafting or59reviewing, and record decisions rather than intentions:60611. General information: what the software does, who owns it, its scope and62 intended longevity.632. Collaboration and licensing: contribution model, governance, and license64 choice (defer license specifics to the licensing skill).653. Analysis: requirements and the problem the software addresses.664. Design: architecture and key technical decisions.675. Implementation: coding standards, secure development workflow, and the68 languages and tools chosen (see the technology-choice rules below).696. Testing and quality assurance: automated testing, continuous integration,70 and code review.717. Deployment and delivery: how the software reaches its users.728. Versioning and releases: versioning scheme, release cadence, archiving.739. Long-term maintenance: resource needs, governance model, and contingency74 plans - succession of maintainers, deprecation and end-of-life strategy.7510. Credit, accessibility, and impact: citation, discoverability, registries,76 and how impact is measured and communicated.7778Two cross-cutting checks:7980- Engage all relevant stakeholders - architects, developers, researchers,81 legal advisors, community managers - so responsibilities are shared and82 understood and the plan is actually adopted. Consider user support,83 documentation, community contributions, onboarding, and governance.84- Plan for integration with development platforms (GitHub, GitLab) and85 research registries and archives (Software Heritage, Zenodo, bio.tools,86 OpenEBench) so the plan is straightforward to put into practice.8788## Keep the SMP alive8990Treat the SMP as a living document, not a start-of-project formality:9192- Revisit it at lifecycle transitions and whenever a major decision changes.93- Prefer a tool that produces both human-readable output (for stakeholders94 and reviewers) and machine-actionable output (for automated workflows,95 metadata extraction, or compliance checks) when the project needs it.96- Build on established templates and checklists rather than inventing a97 format - the ELIXIR SMP template and the Software Management Wizard offer98 guided, low-barrier starting points; the SSI checklist helps evaluate99 coverage. See references.md for the vetted set.100101## Machine-actionable SMPs and platform workflows102103SMPs are becoming structured data, not prose PDFs. When the user's104institution runs a planning platform, draft THERE (or produce105paste-ready content): the Data Stewardship Wizard builds plans from106questionnaire knowledge models and exports funder formats plus107machine-actionable output; DMPonline carries the major funder108templates whose software sections an SMP feeds. A structured plan is109checkable - promised repositories can be diffed against actual110deposits, promised licenses against LICENSE files, promised archiving111against archive records (rseng-archiving).112113Drafting workflow for an agent: for an existing project, read the114repository first - license, CI, tests, CITATION.cff, README - and115write the plan that is TRUE, flagging gaps as planned improvements116with owners rather than papering over them. For a new proposal,117draft from intended practices with this pack's standards as the118default, concrete over aspirational ("unit tests in CI on every119merge", not "high quality standards"). Version the plan in the120repository so changes are reviewable history; revisit at releases121and reporting deadlines, and run a drift check - a plan that says122"Zenodo archiving" while nothing is archived is a liability at123review time. The data twin is rseng-data-management-plans; write the124two consistently and cross-reference them. Record AI assistance in125drafting in aidecl.yaml (rseng-ai-declaration).126127## Choosing languages, tools, and infrastructures128129Distinguish the three kinds of choice before advising: the programming *language* (the130main medium, affecting functionality, readability, and pace); *tools and131frameworks* (reusable abstraction layers for a domain, e.g. web, ML,132workflows); and *infrastructures* (broader knowledge-oriented techniques such133as databases, GPU/FPGA programming, or ML). The considerations below apply to134all three unless noted.135136### Decision rules137138Weigh social factors alongside technical ones - technical merit alone does139not predict a project's success:140141- People and community: prefer what is already used widely in the field, for142 interoperability and reusability (the I and R in FAIR). Draw on existing143 practices, and on expertise available at your institute - a nearby expert144 who can coach you is invaluable.145- Personal and team expertise: account for what the team already knows and146 prefers; factor in project partners' preferences, not just your own.147- Language and ecosystem fit: does it offer the features and frameworks you148 need and save time; is it expressive enough for the design; is it not149 overkill or too complicated for the purpose?150- Deferring the choice: if undecided, design modularly and hide a choice151 behind an abstraction layer so the rest of the application is not tied to152 its specifics and the decision can change later.153154### Match the choice to the lifecycle stage155156Three situations impose different constraints:157158- Rapid prototyping: personal preference weighs most - use something you know159 or want to try. If you know no language yet, Python is a good default.160- Starting a new development project: apply the full set of considerations161 above, balancing feature, social, and personal factors.162- Joining an existing project: you are usually constrained by the existing163 languages and frameworks; switching either is a big, infrequent decision.164 New technology may be exactly why you were brought in - social165 considerations still apply within those constraints.166167### Good default languages168169Opinionated but proven starting points:170171- Python: prototyping, gluing code together, data analysis, ML; easy to start172 and widely adopted across scientific communities.173- C++: high performance, compiled, strongly typed, multi-paradigm.174- JavaScript/TypeScript: anything with a serious web component, and UI for175 non-web applications.176- R: statistical analysis, especially social sciences and medical research.177- Fortran: computationally intensive numerical simulation and HPC.178- Modern, smaller-ecosystem choices: Julia (mathematical modelling, elegant179 semantics, JIT-compiled) and Rust (high performance, safety-first).180- Special purpose: CUDA/OpenCL for GPU programming; shell scripting (Bash,181 PowerShell) for text processing, environment setup, and simple pipelines.182183### Get off to a flying start with templates184185After choosing, do not scaffold by hand - reach for community-curated186templates:187188- Templates bundle current best practices ready to use, and contributing back189 multiplies the effort for future users. Prefer research-software-specific190 boilerplate, which covers aspects generic tools miss.191- Concrete starting points: the Netherlands eScience Center Python template,192 BestieTemplate.jl for Julia, and usethis for R packages.193- IDE snippets and AI assistants offer lighter-weight help (inline templates,194 autocompletion) and are worth using, but full project generators give a195 stronger, best-practice-aligned starting structure.196197## Working with this skill198199The generated references.md beside this file lists the source material200and pointers:201202- references.md - verified Learn more pointers203204205Learn more (verified):206 - https://www.software.ac.uk/guide/writing-and-using-software-management-plan -207 SSI guide to software management plans208 - https://doi.org/10.5281/zenodo.7038280 - practical guide to209 Software Management Plans210 - https://dmponline.dcc.ac.uk - DMPonline planning tool211 - https://book.the-turing-way.org/project-design/project-design/ -212 Turing Way guide for project design213214215<!-- related-skills:begin -->216217## Related skills218219Check whether any of these applies before moving on:220221- rseng-archiving - preservation promises need archiving mechanics222- rseng-data-management-plans - drafting the data twin plan223- rseng-licensing - plan's licensing section needs specifics224- rseng-maintenance-sustainability - planning the long-term maintenance section225- rseng-project-kickoff - brand-new project starts with interview226- rseng-project-scaffolding - template kickstart after language choice227228<!-- related-skills:end -->