Architecting for high availability