Improving strategies for planning in order to increase software productivity, quality, and sustainability, while underscoring the unique characteristics of scientific software, including that requirements often change during discovery.
See Resources: Better Planning
Approaches for improving various aspects of software development, with emphasis on iterative and incremental advances that acknowledge concurrent needs for developing new science capabilities.
See Resources: Software Process Improvement
Procedures and considerations for developing well-engineered, reliable and maintainable software.
See Resources: Software Engineering
Statements about what functions a software product shall perform, including any constraints under which it shall operate but avoiding as much as possible entanglements in how it shall be implemented.
Major considerations in designing software to meet its scientific objectives and sustainability goals. Because requirements for scientific software often change during scientific discovery, design tends to evolve over time.
The ability of two or more software elements to be used together in an application, without special effort on the part of the user. Levels of interoperability range from side-by-side usage through various types of interactions between packages.
See Resources: Software Interoperability
The ability of software to continue or evolve. Considerations are often different when viewed from different perspectives (user, developer, manager, funder), but generally relates to resources to maintain or evolve the code, adaptability of the codebase to new uses and new computational platforms.
See Resources: Software Sustainability
An intentional process of designing for the user experience of a software (or other) product.