Каким бы ни был подход к созданию программного обеспечения, конечная программа должна удовлетворять некоторые требования. Наиболее часто встречаются:
- Эффективность / Производительность: количество ресурсов системы, потребляет программа (время процессора, размер памяти, внешняя память, ширина канала сети, а также взаимодействия с пользователем). Чем меньше ресурсов потребляется, тем лучше;
- Надежность: вероятность того, что результат работы программы правильный. Это зависит от корректности алгоритмов и правильности кодирования;
- Устойчивость: как программа решает проблемы в нестандартных ситуациях, как например неправильные данные, недоступность необходимых ресурсов как например память, локальная сеть, и неправильные действия пользователя;
- Удобство: эргономичность программы. Легкость, с которой лицо может использовать программу для своих целей;
- Переносимость: диапазон аппаратного обеспечения и операционных систем на которых можно компилировать или интерпретировать код программы, выполняя ее. Это зависит от различий в программных ресурсах предоставленных различными платформами, включая ресурсы, наличие компиляторов и библиотек для языка программирования;
- Масштабируемость: Простота дальнейшего сопровождения программы, то есть внесение в нее дополнительных усовершенствований, увеличивающих функциональность или исправляют ошибки. Этот критерий не имеет прямого отношения к пользователю, но влияет на время, за которое программа будет использоваться.