La ingeniería de requerimientos es una parte importante del proceso de desarrollo de software que establece las necesidades del cliente. Existen diferentes tipos de requerimientos como los normales, esperados y emocionantes. El diseño arquitectónico define la estructura de datos y componentes del programa considerando el contexto y requerimientos del usuario. El diseño a nivel de componentes y de la interfaz gráfica de usuario siguen procesos iterativos basados en principios de diseño.