Complexity (# of moving parts)
Randomness (degree of independence)
Formal Analysis
Statistical Analysis
Complexity (# of moving parts)
Randomness (degree of independence)
Formal Analysis
Statistical Analysis
E.g. one of the programs comprising the system all of a sudden not available
Programming errors are not really errors, they're bugs to be squished ;)
(back in 1990s)
Non-imperative
"Everything is a process"
Errors occurring in one process must not be able to damage other processes in the system
"The process achieves fault containment by sharing no state with other processes; its only contact with other processes is via messages carried by a kernel message system." Jim Gray
Programming logic must be able to detect exceptions both locally (in the processes where the exception occurred,) and remotely (being able to detect that an exception has occurred in a non-local process)
We should be able to identify why an exception occurred
The ability to change code as it is executing, and without stopping the system
Store data in a manner which survives a system crash
If the specification says something silly then the program should do something silly -- the program must faithfully reproduce any errors in the specification
Avoid guesswork -- this is not the time to be creative
Be cognizant of latency budgets
Strong isolation