The software can operate with other products designed for interoperability
For example, a piece of software may be backward-compatible with an older version of the same software
Developers can add new capabilities to the software without significant changes to the underlying architecture
The software comprises well-defined, independent components
This independence leads to better maintainability.
The components are implemented and tested in isolation before being integrated to form the desired software system
Isolation before integration allows the division of work in a software development project.
The software is resistant to and able to recover from component failure
A measure of how easily developers can fix bugs or functional modifications
High maintainability can be the product of modularity and extensibility
The software can perform a required function under stated conditions for a specified time
Some or all aspects of the software are usable in other projects with little to no modification
The software can operate under stress or tolerate unpredictable or invalid input
For example, a design can be resilient to low memory conditions
The software can withstand and resist hostile acts and influences
The software user interface must be usable for its target user/audience
Default values for the parameters are a good choice for most users
The software performs its tasks within a time frame acceptable for the user and does not require too much memory
The software should be usable across many different conditions and environments
The software adapts well to increasing data or the number of users