One common source of expensive defects is requirement gaps, e.g., unrecognized requirements which result in errors of omission by the program designer.[6] Requirement gaps can often be non-functional requirements such as testability, scalability, maintainability, usability, performance, and security.