Scientific Software

Ten best practices for scientific software development.

Learn More About This Project    

0

Version Control (The Basics)

Version control creates a starting point for your scientific software project.

Read more about version control (the basics)
1

Track Issues, Bugs, and Features

Using issue tracking software to track issues, bugs, and features creates a centralized, external task list that facilitates collaboration, transparency, and accountability.

Read more about issue tracking
2

Version Control (Beyond the Basics)

Utilizing advanced version control features like forks, branches, and tags allows much greater flexibility for maintaining scientific software.

Read more about version control (beyond the basics)
3

Mailing Lists for Communication

Communication is key to successful scientific software development. Mailing lists provide a transparent and archivable discussion medium.

Read more about mailing lists
4

Checklists for Repeated Tasks

Cheklists improve efficiency for repeated tasks, like running tests, releasing new versions, or bringing new developers onboard.

Read more about checklists
5

Barely Sufficient Documentation

Documentation is the cornerstone of any software project. But documentation should require minimal effort. Ideal documentation writes itself!

Read more about barely sufficient documentation
6

Configuration Management Tools

Scripting library and package installation with configuration management tools (e.g., Makefiles) is necessary for deploying scientific software projects that have complex dependencies, cater to a large user base, and/or run on multiple platforms.

Read more about configuration management tools
7

Tests: Write Early & Run Often

Software testing is critical for maintaining quality code. But test-driven development can also be a tool for designing code with clean abstractions and an intuitive API.

Read more about software testing
8

Pair Programming for Tough Stuff

Two heads are better than one, particularly when designing code that will be re-used often or requires tricky abstraction.

Read more about pair programming
9

Develop a Formal Release Process

Developing a process for releasing new versions of code ensures that maintainable, high-quality code is publicly released in a consistent way.

Read more about formal release processes
10

Continuous Process Improvement

As Winston Churchill said, "To improve is to change; to be perfect is to change often." The rapid-changing landscape of software development provides a perfect laboratory for improving your scientific software. But the pursuit of perfect software is like the pursuit of truth: it is never finished.

Read more about continuous process improvement