By now, you might be thinking about adopting Crossplane in your organization. As we’ve discussed many times, we must set up a platform team to support every product team across the organization adopting Crossplane. But many organizations fail with their technology platform projects because these platforms impact the agility of the consuming teams in many ways. Setting up proper boundaries and an interaction model between the product and platform teams is key to the success of a platform. This chapter aims to help you understand the aspects required to build and adopt a successful infrastructure platform. We will also look at a few common pitfalls that can lead to weak platform adoption and low return on investment.
The following are the topics covered in this chapter:
In the following section, we will start with understanding why we need to approach infrastructure platforms as product development.
We touched on this topic a bit in Chapter 2. It is time to look back and see why we need a platform team to develop the Crossplane APIs. The following are the three key reasons:
Now that we are convinced that an infrastructure platform team is required, the following section will explore the product teams’ expectations of the infrastructure platform team.
A platform team for infrastructure means external delivery dependency. This is something that is always avoided by agile product development teams. If you have worked in a large organization, you might have noticed that the product teams are often unhappy with what the platform team offers. They have issues with the delivery timeline, backlog coupling, and weak contracts. It is critical to set up a proper interaction model between the product and platform teams to mitigate these risks. The following are qualities that a platform team should possess to match the delivery expectations of product teams in the modern software engineering era:
The following section will look at the product development engineering practices for the platform team.
Adopting product development practices is a critical component that can make a platform team successful. The following are some of the product development practices for adoption:
Information
Goldilocks architecture governance has gained traction in modern software engineering practices where a balanced approach is taken between governance and flexibility.
In the following section, we will cover the self-service aspect of platform engineering.
Self-service is one of the critical aspects of building a platform. Think about how any cloud provider works. We have the console and the APIs to create/operate the resource required. It’s an entirely self-service model where users can manage resources according to their permissions. A refined resource granularity in a cloud provider environment will work for any organization and personas. We must have a similar experience for our platform as well. With Crossplane being an API-based resource composing platform, part of the problem is already solved. But we must put a lot of thought into defining the scope and granularity of the XR/claim APIs that the product teams will consume. What level of granularity will work for your organization is a crucial question to ask. It may depend on the organization’s size, the team boundaries, the technical maturity of the developers/platform team, and so on. Defining wrong boundaries will derail the self-service agenda.
Getting the boundary perfect at first is difficult. It keeps on improving in iterations by measuring the self-service metrics. In addition to API boundaries, we need to focus on the quick-start guide, technical support system, and building community, as discussed earlier, to enable self-service further. The whole experience should be like how a successful cloud provider platform works. The only difference is that we operate on a higher level of abstraction to tame the complexity.
A single centralized platform team serving multiple internal teams within the organization is not a fun place to work. We must manage the backlog to satisfy everyone’s needs. There will be continuous requests from every direction to enhance an existing XR/claim or create a new one. We may end up in many unwanted situations, such as constant delivery pressure on the platform team, impact on the product team’s delivery throughput, or frustrated product teams developing the capability locally. The following are some of the ways to mitigate these risks:
In the following section, we will investigate various stages of platform API development and how they impact the interaction between the platform team and the product team.
We may start our Crossplane API development as a small proof of concept working with one of the product teams. Later, when we are comfortable with the proof of concept, we will release an alpha version asking a few teams to consume and test it. Again, when we are satisfied with the alpha version, we will ask a few more sections of the organization to adopt and go live with the API. If everything goes well, we can move the API to general availability to be consumed by anyone in the organization. It will not end there. Sometimes, we will have the requirement to deprecate the APIs and mark them for removal in the future. The following figure represents the API journey:
Every API may not go through all the phases mentioned. It may take its own path, moving from left to right and skipping some stages depending on the situation.
Information
Sometimes, we may move directly to the deprecated state from alpha or beta if we find no business value or technical feasibility.
Each step requires a different engagement model and developer capability. The following list describes each of the life cycle phases:
Acknowledgment
Many of the concepts we discussed in this chapter are influenced by the ideas found in https://teamtopologies.com/, Evan Bottcher’s work on platform engineering (https://martinfowler.com/articles/talk-about-platforms.html), and finally, some experience in implementing these concepts at work.
The following diagram represents the preceding API stages and the team interaction model discussed:
This takes us to the end of the platform life cycle discussion. In the following section, we will look at the Open Application Model (OAM) specification to take some inspiration for the organization-level team structure from the perspective of platform engineering.
We’ve touched upon OAM specifications several times throughout this book. We will refresh the same topic from the perspective of organizational structure. We will take some inspiration from the OAM model to organize the platform and its ecosystem. OAM proposes the following three personas to deploy and manage cloud-native applications:
Overlapping the OAM personas and other concepts we learned in this chapter, we could structure the platform team and its ecosystem as illustrated in the following diagram:
The following aspects explain the team constructs represented in the preceding diagram:
We could explore more models to structure the platform and its ecosystem. But the core idea is to manage the platform development as a product engineering practice treating all internal consumers as customers.
We started the book with an idea to support cloud-native architects, platform engineers, infrastructure operators, and application operators interested in simplifying infrastructure, application, and service automation with the Kubernetes APIs. Throughout the book, we’ve covered different aspects of building a fully declarative self-service control plane to automate infrastructure, applications, and services using Crossplane and Kubernetes. I hope you learned about the required concepts while having fun. Let’s together take software engineering in to a new era.