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.
Approaches for improving various aspects of software development, with emphasis on iterative and incremental advances that acknowledge concurrent needs for developing new science capabilities.
Procedures and considerations for developing well-engineered, reliable and maintainable software.
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.