Non-Functional Requirements Are Essential
I'd almost go as far as to say that the primary indicator of success for an application architecture is whether it supports the non-functional requirements the customer has described. Anyone can, given enough patience and stubbornness, carry on gluing features together arbitrarily until all of the required functionality is present. However, making it do that coherently, in a way that combines desired attributes from the customer side (the NFRs) and the developer side (adaptability, readability, and the like) is where the art form of software architecture comes in.
So, what are these non-functional requirements? It's common to say that these are the "-ility" statements made about the software. It takes a bit of squinting to accept that, but it's roughly true:
- Performance: How is this an -ility? Is it speedability? Velocitility? Well, something like that anyway. It's important to understand what's meant by performance...