Maintaining Development Team Independence
In a large organization, individual development teams sometimes have a level of independence that allows them to make some decisions about where and how their services are to operate.
Sometimes a development team will have specific guidance and constraints about how it operates its services in its own operations center but may have some flexibility for experimentation outside the systemic structures. This flexibility can lead to testing, experimenting with, and ultimately using specific cloud services in production that are unique and provided by specific cloud providers. When individual development teams are making independent decisions, not surprisingly, those decisions are often different.
Frequently, the net result is the organization ends up using a patchwork of services offered by different cloud providers for distinct parts of larger applications. This leads to individual applications relying on multiple cloud providers. More specifically, these applications have parts that depend on certain capabilities as provided by different cloud providers. These different services, or components of the application, are using different cloud providers, as shown in Figure 2-5.
This process, which leads to a polycloud architecture, isn’t intentional but is the result of independent development teams operating independently. It is a side effect of the operational choice to allow teams to make their own decisions.
Allowing individual teams to make operational choices has many advantages, such as an improved sense of team ownership. This type of polycloud end result may appear suboptimal from a global standpoint—your application is using similar services from separate and distinct providers—but in fact may provide optimizations at the organizational and team level that far outweigh any perceived disadvantages.