One of the things I learned early on is to design systems that allow for easy ongoing change. How? Cloud or non-cloud system, you build for change by compartmentalizing system components so that they can be configured or changed on their own. A simplistic analogy would be how we can interchange car parts to mix and match system components, having the ability to replace or update components without redeveloping the entire vehicle.