Design principles for availability