- Performance
- Availability
- Security
- Scalability
- Maintainability
- Accessibility
- Deployability
- Extensibility
Look at your Application or System and think about each property in regards to it. Be sure to understand what is the Subject to which you are trying to apply those principles, because many of them can be applied to different things.
- Performance - a system's response time. Time a user waits to receive a response after performing an action.
- Availability - how often is a system online and works. 99.9%... 99.99%...
- Security - what kind of protection a system needs. Think about - Authentication, Authorization, Data Protection, Auditing.
- Scalability - ability of a system to increase its capacity. Scaling Up, Scaling Out, Growth over time.
- Maintainability - how easy a system can be modified. Correct bugs, Improve performance.
- Accessibility - how flexible is a system. Can it accomodate different users' needs? Fonts, Colors, Sounds, Languages, etc.
- Deployability - how a system is going to be deployed. How users will get new versions?
- Extensibility - how easy is it to extend/enhance a system? Add new features. Will you need to throw it away in the future because it is not extensible?
- Not all systems are the same. A lot of systems are primarily focused only on a few requirements.
- "Main requirements" of different systems may be different. One system will have accent on Security, another on Scalability, etc.
- There is always some Cost associated with everything (and with each requirement in particular)
- When designing a system, deside what are the most important areas for your system.
http://www.alliedc.com/pass-made-principal-for-software-architecture/ https://www.linkedin.com/pulse/swot-passmade-two-great-tools-go-together-jeff-morey