La arquitectura de un software determina cómo se dividirá el programa en componentes y cómo estos interactuarán entre sí. Los requisitos no funcionales de un software son aquellos que no afectan directamente al comportamiento del programa, sino que se refieren a su calidad y a la forma en que el programa se debe comportar. Algunos ejemplos de requisitos no funcionales son el rendimiento, la fiabilidad, la seguridad, la portabilidad, la escalabilidad, la usabilidad y el mantenimiento.
Los requisitos no funcionales deben especificarse de forma clara y concisa, ya que de lo contrario pueden dar lugar a interpretaciones erróneas. También deben tenerse en cuenta en el diseño de la arquitectura de un software, ya que pueden afectar de forma significativa el rendimiento y la fiabilidad del programa.