Software Management
This site contains best practices and USGS supported options for software source code management and release. Deployment of software, as desktop packages or web applications is highly controlled by additional policies and is described in this body of knowledge as an optional step. The best practices described here are applicable to all software (defined below).
USGS Software Tools and Resources
Links to common USGS tools to help manage USGS software projects and code throughout its lifecycle from planning to distribution.
All USGS software is subject to the requirements of the Federal Source Code Policy and must be publicly accessible. Further, the 2013 Office of Science and Technology Policy requires Scientific Software developed by USGS-funded science activities be publicly available.
This website provides information representing the primary stages in the software development life cycle:
-
Plan - Checklist of all the requirements needed for your software development project.
-
Develop - The initial experimental code writing stage that includes concepts such as source code control and Git hosting platforms.
-
Deploy - (Optional) Best practices to execute your code in a physical environment.
-
Test - Methods for automated and systematic testing of code functionality.
-
Review - Important types and methodology for peer review of source code.
-
Approval - Additional guidance on review and approval of Scientific Software
-
Distribute - Policies and required documentation for distribution of software.
Software Definition
The broad definition referenced below is used within this website to encompass all software development activities at the USGS.
Software: Refers to (i) computer programs that comprise a series of instructions, rules, routines, or statements, regardless of the media in which recorded, that allow or cause a computer to perform a specific operation or series of operations; and (ii) recorded information comprising source code listings, design details, algorithms, processes, flow charts, formulas, and related material that would enable the computer program to be produced, created, or compiled. Software does not include computer databases or computer software documentation (See: Federal Source Code Policy: Appendix A - Definitions)
What is Scientific Software?
A category of software called “Scientific Software” is more specifically defined by the USGS Instructional Memorandum on Scientific Software for Release.
The USGS Scientific Software Instructional Memo defines Scientific Software as: “Software containing source code implementing scientific algorithms and/or producing scientific data”. It may include any custom developed code yielding scientific results, thereby, facilitating a clear scientific workflow of analysis, scientific integrity, and reproducibility. USGS scientific software must be reviewed and approved as a USGS Software Release product using the USGS Information Product Data System (IPDS), and distributed from a public software hosting platform such as the USGS Open Source Git repository.
Authors determine this distinction, however, if you are still unsure how to classify your code, consult with your Bureau Approving Official and center director before publicly releasing your code. The best practices described on this website are applicable to all software including Scientific Software.
Is a website, numerical model, or script that produces figures for my scientific information product considered software?
Yes, all code-based products are software. It is the author's duty to determine if the code should be released as an official USGS product and if the Scientific Software IM applies. The best practices described on this website may be applied to any type of code or software development.
Examples of non-scientific software:
-
Applications that support the business processes of USGS (i.e. Basis+)
-
Informational websites that are not computational in nature.
-
Websites that are created as part of a communication strategy for sharing scientific results that are published and made available elsewhere.
Examples of Scientific Software:
-
Predictive models
-
Artificial Intelligence/ Machine Learning programs
-
Python scripts or Jupyter Notebooks whose output is used in an interpretive USGS information product.