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 itself.
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.