- Plan for failure
- Understand what the "minimum" operating requirement is
- Understand the time critically of information
- Understand the accuracy requirement of information
The thing that unifies them all however is that the mentality of systems designers should be to think about how to properly fail the system. Planning for failure is about understanding what makes sense, what is really is critical and what you can cope with. As systems become more and more distributed and are co-ordinating more and more services it will be reckless to assume that everything will work just how you envisaged it.
Failure will happen. Don't cope with it... plan for it. Sometimes you might even force failures in order to keep the core of the system working. Failure shouldn't be a binary condition.