1. A system comprising: at least one computer; and at least one computer-readable medium coupled to the at least one computer having instructions stored thereon which, when executed by the at least one computer, causes the at least one computer to perform operations comprising: accessing a design of a software application prior to development of code for the software application, the design defining an architecture for the software application in a modeling language; accessing design quality rules that are defined to evaluate quality of designs of software applications and that pertain to a rigidity design quality attribute, a performance design quality attribute, and a security design quality attribute; applying the accessed design quality rules to the accessed design of the software application to detect violations of the accessed design quality rules; accumulating, for the rigidity design quality attribute, detected violations that pertain to extensibility of the design of the software application or detected violations that pertain to modifiability of the design of the software application; accumulating, for the performance design quality attribute, detected violations that pertain to the performance design quality attribute; accumulating, for the security design quality attribute, detected violations that pertain to the security design quality attribute; computing a rigidity metric for the accessed design of the software application based on the accumulated violations that pertain to the extensibility of the design of the software application or the accumulated violations that pertain to the modifiability of the design of the software application, the rigidity metric quantifying how one or more design defects in the accessed design of the software application impact at least one of the extensibility or the modifiability of the software application; computing, for the performance design quality attribute and based on the violations accumulated for the performance design quality attribute, a performance metric that reflects software design quality in terms of the performance design quality attribute; computing, for the security design quality attribute and based on the violations accumulated for the security design quality attribute, a security metric that reflects software design quality in terms of the security design quality attribute; computing a design quality composite index by combining the rigidity metric, the performance metric, and the security metric; providing output describing one or more violations of the accessed design quality rules detected and related to design quality of the software application based on the computed rigidity metric, the performance metric, and the security metric; based on the output, receiving user input to address the one or more violations of the accessed design quality rules; and subsequent to receiving the user input to address the one or more violations of the accessed design quality rules: obtaining a recovered software design by reverse engineering code developed for the software application based on a version of the design of the software application stored after receiving the user input to address the one or more violations of the accessed design quality rules, the recovered software design defining an architecture of the code developed for the software application in the modeling language, determining an existence of the version of the design of the software application stored after receiving the user input to address the one or more violations of the accessed design quality rules, in response to determining the existence of the version of the design of the software application stored after receiving the user input to address the one or more violations of the accessed design quality rules, comparing the recovered software design with a version of the design of the software application stored after receiving the user input to address the one or more violations of the accessed design quality rules; based on comparison results, detecting inconsistencies between the recovered software design and the version of the design of the software application stored after receiving the user input to address the one or more violations of the accessed design quality rules, and providing output describing one or more inconsistencies between the recovered software design and the version of the design of the software application stored after receiving the user input to address the one or more violations of the accessed design quality rules.