Architecting for the Cloud: Best Practices