Every software engineer should be aware of not only what a system does but the quality of work that it delivers and if it fits the situations and the expectations. It concerns itself with designing the solutions that address quality attributes or what is nonfunctional requirements.