Ten best practices for scientific software development.
Version control creates a starting point for your scientific software project.
Read more about version control (the basics)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 trackingUtilizing 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)Communication is key to successful scientific software development. Mailing lists provide a transparent and archivable discussion medium.
Read more about mailing listsCheklists improve efficiency for repeated tasks, like running tests, releasing new versions, or bringing new developers onboard.
Read more about checklistsDocumentation is the cornerstone of any software project. But documentation should require minimal effort. Ideal documentation writes itself!
Read more about barely sufficient documentationScripting 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 toolsSoftware 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 testingTwo heads are better than one, particularly when designing code that will be re-used often or requires tricky abstraction.
Read more about pair programmingDeveloping 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 processesAs 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