My experience in the software industry has been all about building enterprise solutions. Unlike Consumer focused solutions, Enterprise solutions have stringent non-functional requirements. The article Enterprise vs. Consumer startups describes five critical differences between the different types of startups, and two of these differences have to do with the so called quality attributes, Security, and Maintenance. I claim that we cannot afford to play down these requirements, even with consumer oriented software, especially when we are marching towards an economy that is driven by computer systems.
Take Security for example. The security of personal data is as important, if not more important, as the corporate data, to the individual using the system. Similarly, system availability is important when you are offering any service since you are bound to lose a customer, consumer, or business when you don’t have high availability. The availability metrics are of course more exacting for a mission critical system (Five nines) vs. those that can afford to have more downtime.
The Microsoft Application Architecture Guide, Chapter 16, on the MSDN website, while several years old, is still a good place for a refresher on the topic.
Where do Quality Attributes fit into the Agile Development process? Experience says “Just Enough” up front architecture design would be able to articulate these requirements to be comprehended in the agile software development process, including identifying what quality attributes must be in place for the release of a minimum viable product. Carnegie Mellon’s Software Engineering Institute’s website and blogs are treasure troves of information on the treatment of quality attributes and Agile Development. Check out the paper Evolutionary Improvements of Quality Attributes: Performance in Practice by Neil Ernst which tries to address the question “How do projects slice quality attribute requirements into iteration-sized pieces, and how are these pieces allocated to a project plan or sprint backlog?”
What about Quality Attributes and the Cloud? Architects and software developers have to still care about how these non-functional requirements will be met when taking advantage of cloud deployments. The cloud infrastructure must be evaluated and reviewed in order to choose the options that will meet the prioritized quality attributes each system demands. If you are making the transition from on-prem to the cloud, it is important to test the waters with a pilot to understand all the variables involved. The requirements for availability and performance will have a significant impact on the cost of operations.