Skip to content

Self Learning: Software Development

Manuel Garcia edited this page Sep 27, 2022 · 1 revision

Project design guide/software development roadmap

The project design guide from the Turing way project provides best practices and guidance for the planning and development aspects of a research software project.

Collaborative software development with Git

Collaborative software development on GitHub/GitLab to release the software can benefit from a structured approach.

Git branching model

Several git branching models and strategies are used in research software development. To choose a branching model that is suitable for your project, the following considerations need to be discussed:

  • How many people are contributing to the code base?
  • How frequently do you plan to release a new version of the software?
  • How long would you like to maintain and support the older versions of the software?

For larger projects that require a structured (and more strict) approach that reduces conflicts and improves maintainability, we would recommend adopting GitFlow. For smaller projects with fewer contributors, the suggested model from GitHub will be sufficient.

Collaborating on GitHub/GitLab

Adopting a branching method is part of a broader effort to improve collaborative software development. We include the following references to improve software collaboration:

Information for new developers

  • Include a clear contributing guidelines document in the repository Consider implementing a team member lifecyle to facilitate the on- and off-boarding (temporary) team members

Documentation with Sphinx

Sphinx is the most popular platform for creating documentation for Python projects. Recommendations for Python code documentation:

Python code development and maintenance

  • Self-paced publicly available intermediate level training courses on tips and techniques for python code development and maintenance: Research software engineering with Python and Intermediate Research Software Development in Python
  • Manage software dependencies by using a requirements.txt (pip) or environment.yml (conda) file in your project, this would ensure that your software is reproducible by others. Continuous Integration
  • Test design concepts and examples from Code Refinery
  • Follow a coding style/standard to ensure consistency in code development for a project that involves multiple developers. For Python, use the PEP8 coding style guidelines.
  • Code quality: Use flake8 (static code analysis tool) to check the code against the PEP8 coding standard. Use black to format the code as per PEP8 coding standard. Use pylint to detect code smells and to get suggestions for code refactoring.

FAIR and open-source software

The references below provide guidelines to make your code FAIR (Findable, Accessible, Interoperable and Reusable) and ready for publishing.

Relevant workshops and learning materials