Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 20 additions & 10 deletions software/principles.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
title: "Principles"
---

The guiding principles below are those shaped and informed by the core
values.
The guiding principles below are those shaped and informed by our
[values](index.qmd#values).

## Wherever possible, re-use existing and openly licensed material

Expand Down Expand Up @@ -60,11 +60,6 @@ aim to design and build software:
- That fits well into our own and others' software ecosystems and
workflows.

By following many of the principles in this page, we will already have
achieved this. What this means is that we will likely build smaller,
focused software packages that each can connect well together into a
larger ecosystem.

## Use software that has characteristics of stability and reliability

There are always new software being built, but often though not always,
Expand Down Expand Up @@ -95,9 +90,10 @@ a server for legal or privacy reasons. Some groups may be easily able to
have their data be locally or be put up on popular hosting services like
GitHub or [Zenodo](https://zenodo.org/). To be equitable and inclusive,
we aim to design and build for computing environments with less powerful
read/write speeds, limits in memory and storage, local rather than
remote/server environments, lower Internet access and connectivity, and
in different operating systems.
read/write speeds, limits in memory and storage, local and remote/server
environments, lower Internet access and connectivity, and in different
operating systems (covering the most commonly used operating systems:
Windows, MacOS, and Linux).

## Build software that is code-based rather than GUI-based

Expand Down Expand Up @@ -158,6 +154,13 @@ complex software. For instance, we aim to:
actions, inputs, outputs, and without side-effects.
- Build smaller functions that chain together to build larger ones.
- Use fewer and simpler programming data structures.
- Keep individual pieces of functionality independent: Each
functionality should (ideally) be able to run on its own without
depending on other functionality.
- Assume as little as possible about the environment: For each
functionality, ideally assume as little about the current state of
the environment as possible. For instance, what the exact path is on
the filesystem or where in the filesystem the software is running.

## Use a functional programming paradigm

Expand All @@ -169,3 +172,10 @@ objects when run within the function, emphasises clear input and output
without side effects, and has features that are more natural to humans
to think about. We aim to make use of more functional programming
features and where absolutely necessary use object-oriented programming.

## Integrate GDPR, privacy, and security compliance

We are committed to ensuring that our software complies with GDPR and
other privacy regulations. Many of our users work with health or
personally sensitive data, so it is crucial that our software adheres to
these standards.