Workflow checklist
Overview
Teaching: 5 min
Exercises: 20 min
Duration: 0 min
How to use this checklist
- Copy the checklist to a new document.
- For each item, think about what it involves, and when you will do it.
- Consider how you might remind yourself to do it, or persuade yourself to make time for it.
- As you come up with your answers, write them in the space provided, or tick one of the existing suggestions.
- The suggestions are roughly in the order of recommended best practice.
- When you’ve answered all the points in a section, tick it off.
Checklist
Licensing [ ]
- I will find out who will be the rights holder for the software
- When I apply for funding
- At the beginning of the project
- When I put the code on a repository
- When I make the repository public
- When _____ gets back to me, and I’ll chase them if they haven’t by ______.
- ___________________________.
- I will decide on what license to apply to the software
- When I’ve found out who the rights holder is
- When I make the repository public
- ___________________________.
- I will review the license applied to the software
- When I add new dependencies
- ___________________________.
Documentation [ ]
- I will write instructions for using the code
- When I start to write code
- When I put my code on a repository
- ___________________________.
- I will document the code using
- Recognised standard tools (e.g. Doxygen)
- Separate documents
- Inline comments
- ___________________________.
- I will update the documentation
- As I make changes to the code
- At a set time each day/week/month/_____
- Before I publish a new version
- ___________________________.
- I will publish the documentation
- Automatically using continuous integration
- Whenever I publish a new version of the software
- ___________________________.
Code [ ]
- I will make the code readable
- As I write it
- Once things are working like they should
- Before I publish a new version
- ___________________________.
- I will organise my files
- Using a well-planned and clear directory structure
- ___________________________.
Dependencies [ ]
- I will make sure my dependencies are listed
- Using a full environment management system (e.g. Docker, Apptainer)
- Using automated dependency management tools (e.g. conda, renv)
- By automatically documenting them when the code runs
- By including them in the documentation
- ___________________________.
- I will review my dependency list
- Automatically using dependency management tools
- When I add or remove a dependency
- Before I publish a new version
- ___________________________.
Tests [ ]
- I will test my software
- Using a testing framework (e.g. Cypress, pytest, testthat)
- By having a set of things I do every time
- ___________________________.
- I will run my software tests
- Automatically using continuous integration
- Before I push to the repository
- Before I publish a new version
- ___________________________.
Repository [ ]
- I will upload my code to
- A dedicated code repository (e.g. GitHub)
- A well-resourced repository (e.g. OSF, FigShare, Zenodo, university repositories)
- A personal website
- ___________________________.
- I will make the code publicly accessible
- By enabling the approriate permissions in the repository
- By publishing specific versions
- ___________________________.
Publishing [ ]
- I will publish my code by
- Issuing releases on a code repository
- Ensuring the code repository is publicly accessible
- ___________________________.
- I will do this
- Whenever milestones are reached
- Whenever I publish a related output (e.g. research paper)
- Automatically whenever I push to the repository
- ___________________________.
Referencing [ ]
- I will make my code citable by
- Publishing specific releases with a DOI (e.g. via Zenodo)
- Writing a technical/methods paper and submitting it to a journal
- Citing specific releases directly
- Citing the repository with a time/version stamp
- Citing the repository only
- ___________________________.
- I will do this
- When I publish the code
- When I publish a related output
- ___________________________.
Collaboration [ ]
- I will make it
easy for others collaborate
on my code by (tick all that apply)
- Using collaboration-friendly services like GitHub
- Writing a welcome guide for new contributors
- Having easy templates for users to submit bug reports and feature requests
- Ensuring a welcoming attitude for contributors
- ___________________________.
- ___________________________.
- ___________________________.
- ___________________________.