In this paper, we discuss what we believe is the grand challenge facing the software quality research community: the ability to accurately define, in the very earliest stages of development, the techniques that will be need to achieve the needed levels of the various non-functional attributes: reliability, availability, fault tolerance, testability, maintainability, performance, software safety, software security. We will further explore the associated technical and economic tradeoffs that must be made in order to achieve quality and to also certify software quality. And we will also take into account the fact that satisfying a particular level of each attribute requires specific cost expenditures, and some of these attributes conflict with each other.