The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both.
There are many “-ilities” you must take into consideration with every project.
2. Maintainability (Changeability/Flexibility / Testibility)
4. Functionality* – Ability of the system to do the work for which it was intended
6. Upgradeability* – Does/can the system have an relatively smooth upgrade path
7. Availability (or Reliability)
9. Lookibility * – Generally shiny and nice looking