
Switching cloud providers can be difficult if you don't architect code that minimizes cost of change (especially when dealing with outside vendors and service providers) By using wrappers, or interface protocols around vendor services, you reduce cost of change by avoiding integrating external dependencies everywhere in the codebase. When you abstract them out as I/O devices inside wrappers, making changes is a lot easier than having to refactor the entire app. By using this wrapper technique, I was able to quickly switch clouds and reduce cloud costs almost 50% with a few hours of work! Architecture is about making the important decisions early, and vendor abstraction is one of those simple but important decisions that need to be made from the start for a scalable enterprise solution that can be quickly adapted and respond to change.