views:

583

answers:

10
  1. Overload protection
  2. Fail safe, clustering
  3. Scalability
  4. Software upgradable platform
  5. Data consistency

Something missing?

(I'm thinking of classic website + db)

A: 

Documentation?

Richard Franks
+1  A: 

Some that I can think of...

  1. Maintainability
  2. Extensibility (falls in line with Scalability)
Jon Erickson
+1  A: 

Yes.

(Why do you think there is a finite list of these?)

Allen
Hum. It feels like it. If not. Then I will never be done. :)
Flinkman
A: 

Handling 640k, it's enough.

elmarco
A: 

It depends on the system. Embedded real-time software is going to have a completely different set of design principles than a large public facing web-site.

John Meagher
A: 

Utility. I mean it has to do something helpful, right?

Kevin Conner
A: 

Simplicity

Kevin Conner
+1  A: 

The Software Architecture term for this kind of principles is Quality Attributes, and you can find that there has been some research on quality attributes specifically for Web Applications if you look for those terms.

For example, Web Software Applications Quality Attributes (link to PDF)

In my opinion, most software systems can be related to almost every quality attribute.

Every system has security needs, performance needs, availability needs, mantainability and modificability needs, flexibility, usability, scalability, etc.

The important thing for coming up with a good design is understanding the relative priority between scenarios of those kind of quality attribute categories: you cannot design a system for which security and performance 'are important', because 'security' and 'performance' are very abstract and subjective terms. You have to come up with concrete scenarios that describe what is important regarding 'security' and 'performance' for your system.

For example, 'protecting your user's personal information against plain HTTP traffic sniffing' is a different scenario from 'protecting your user's personal information against database theft' and both are scenarios that might require different application design solutions.

So, in summary:

Do some research for what are the most common quality attribute scenarios for web applications using google, and then further elaborate the quality attribute scenarios for your specific application, in order to decide what are their relative priorities for you, so you can decide which application design strategies are the right ones.

Sergio Acosta
+1  A: 

If you're looking for a list, Wikipedia is a good resource:

If you're looking for professional training, Carnegie Mellon University's Software Engineering Institute has certification programs on Software Architecture:

Fhoxh
A: 

FURPS+ is used as a mnemonic way to remember the architectural principles. According to Wikipedia, this is widely used in the industry.

FURPS+ System for Classifying Requirements

  • Functionality: functional requirements
  • Usability: aesthetics and consistency in the user interface
  • Reliability: availability ("up time"), accuracy of calculations, and ability to recover from failures
  • Performance: throughput, response time, recovery time, start-up time
  • Supportability: testability, adaptability, maintainability, compatibility, configurability, installability, scalability, and localizability

The "+" in FURPS+ helps to remember concerns such as:

  • Design requirements
  • Implementation requirements
  • Interface requirements
  • Physical requirements
philippe