What criteria?
In general, there are three high level answers to this question: and, it is very difficult to answer precisely
- Satisfying functional and performance requirements
- Maybe this is too obvious to include
- Often not achieved, though: but because of design choices? Garlan: yes!
- Managing complexity
- Accommodating future change