Sometimes there are situations when our programs try to install from old sources or do it “indefinitely”, more than the developers want to wait.
To solve this problem and others, the Immutable infrastructure approach was invented, which we will talk about at two-day online intensive… After discussing the problem and approach, we will use the Packer to build an image for our cloud using the Packer and run our application.
The translation of the material was prepared as part of the course DevOps Practices and Tools.
More recently, cloud infrastructure has been praised for its simplicity. For organizations with complex on-premise infrastructure, clouds provided an intuitive, scalable, and cost-effective alternative that promised to change the overall approach to IT infrastructure.
But as the complexity of cloud solutions has grown, this simplicity has faded into the background. Today, the portfolio of cloud infrastructure services is incredibly large, constantly growing in complexity, and it is becoming more and more difficult to keep up with it.
Amazon Web Services alone offers 175 different infrastructure services. There is no longer a small list with a set of simple, intuitive services that can be quickly deployed with a couple of mouse clicks.
Instead of simplifying approaches to infrastructure, clouds are moving in the opposite direction – creating new management challenges, requiring additional virtual datacenter skills and increasing mean time to market.
Why growing cloud complexity is a business problem
When cloud infrastructure first appeared, it was used for the flexibility, scalability and ease of management that it offered.
The clouds allowed developers and infrastructure teams to roll out new services in minutes, dramatically reducing time to market and enabling organizations to gain a critical competitive advantage in crowded markets.
But as the cloud has grown in complexity, these benefits have become less important for many organizations. For infrastructure teams, the increased complexity of services entailed the acquisition of additional skills, and for developers, the need for deeper expertise in self-deploying services.
Simply put, the increasing complexity of the clouds has brought many organizations back to the state they were 15 years ago.
Solution – treat infrastructure as an internal product
Major cloud providers may have stopped providing simple, intuitive infrastructure solutions that anyone can deploy on their own. But this does not mean that you cannot create your own internal platforms and processes.
This is the essence of the Platform Engineering approach. Instead of spending all of its time setting up and deploying new instances, environments, and services for developers, the infrastructure team creates a platform that offers self-service where developers can easily select the required components and deploy them themselves.
This approach began to be widely adopted in 2020, as evidenced by the report State of DevOps from Puppet. According to the report, 63% of organizations have at least one internal self-service platform.
With reusable components and self-service, infrastructure teams can spend less time customizing individual solutions and enable businesses to quickly time-to-market for new digital services.
The diagram above shows how this approach exponentially increases speed to value and time to market as the platform evolves and reusable components are created that can be easily combined to create a new product and expand the business.
As you create a reusable product or component, the Build-Measure-Learn cycle gets smaller and faster, accelerating value. However, as it evolves, careful management of the platform is required to keep it component-centric and cohesive.
Why this approach works
This platform-based approach works because it is responsive to everyone’s needs and gives all teams the time and ability they need to focus on the tasks they do best:
Development teams and other internal clients You don’t need to learn new languages or develop cloud infrastructure management skills to get the services you need.
Infrastructure Platform Team sees all the requests related to cloud infrastructure and can expand its expertise as the cloud solutions and infrastructure landscape evolve, ensuring the relevance and value of products for the organization as a whole.
However, it is important to note that these results can only be achieved with proper planning, implementation and management.
What could go wrong?
ThoughtWorks recently worked with a fintech enterprise that was trying to adopt a platform-based approach and faced numerous issues limiting its effectiveness.
A team was created that included several new cloud engineers and several engineers from the current data center team who had programming skills.
The team worked on the creation of the platform for 18 months. The platform was supposed to provide developers with their own cloud components using the approach infrastructure-as-codeby sending a Pull Request to the platform development team that coordinated and deployed applications on load-balanced virtual machines via a continuous delivery (CD) pipeline.
But after a year and a half of development, only 2% of productive tasks passed through the new platform. Why?
The diagram above shows the dependencies of tasks in the backlog generated by this approach. This was fake self-service because often other teams or individuals had to contribute and tweak the request before it could be accepted. Thus, the owner of the final product remained unclear.
As new development teams pushed in more code, this inefficiency only increased (shown in the bottom half of the diagram). There were more review requests, but still only one platform development team reviewed them, creating a serious bottleneck that only further slowed down the deployment process.
The end result was a platform that struggled to deliver the promised value to the business. Lags and bottlenecks slowed down time to market, new languages and processes made it difficult to interact with the internal platform, and ultimately did not meet the needs of developers.
Recipe for success
To ensure the success of this approach, there are three key factors to consider when creating and implementing a cloud infrastructure platform strategy:
Consider the needs and expectations of your customers
Designate a product owner
Review infrastructure performance metrics
1) Consider the needs and expectations of your customers
In this approach, infrastructure is viewed as a set of internal products, and developers as customers. As with any product, one of the most important keys to success is understanding and responding to customer needs correctly.
Just as product teams and marketing are focused on delivering quality and intuitive customer experiences, cloud infrastructure teams must do the same for internal customers. To ensure high quality and long-term success, developers must be at the center of every solution.
For example, if interacting with a platform requires developers to learn a new language just to keep doing the same work that they have done before, then that would not be a good developer experience. As a customer who has too many obstacles to overcome in order to buy an item from an online store, he will simply leave and go back to how he did his job before.
2) Designate a product owner
One of the biggest challenges with true self-service in a cloud infrastructure is that no team or customer leader is interested in solutions that can be reused throughout the organization. Each team simply creates what it needs at the moment. This is fine for a specific team, but it leads to duplication of work throughout the organization.
By appointing a product owner, you can overcome this challenge and design cloud infrastructure products with the needs of your entire organization in mind. Such a leader independent of the team will ensure that each decision is maximized.
There is enough full-time work here, so resist the temptation to split responsibilities within the team. Dedicating an individual to this role will increase accountability rather than simply assigning additional tasks to current team members.
This will help grab attention and show intent for change, desire for improvement, and ultimately your decision to start treating infrastructure as a product.
3) Review infrastructure performance metrics
One of the biggest hurdles to this product-based approach to infrastructure is the outdated view of what a successful infrastructure team looks like. In the past, there has been a desire to reduce costs and keep systems as stable as possible without introducing changes and additional features.
On the other hand, the platform design approach aims to enable developers to quickly and easily turn their applications into market and business ready services.
You won’t see any short term cost savings. There will be long-term improvements in metrics such as time to market, developer productivity, and consistency in delivery and deployment, leading to a reduction in Mean Time to Restore (MTTR). These are the criteria by which you will need to measure success, and it is very important that all stakeholders and leaders at all levels understand this.
Cloud infrastructure management has become extremely challenging. If you want to continue to provide developers and IT teams with the fast, self-service infrastructure services that the cloud used to provide, then you will have to take matters into your own hands.
By adopting a platform design approach and building infrastructure “products”, you can revive the simplicity of early infrastructure-as-a-service (IaaS) offerings while leveraging modern capabilities and technologies.
This approach requires special responsibility. It requires a deep understanding of the internal customers that these products will serve. And it should be based on new data center performance metrics that are more in line with the value that a modern infrastructure approach can bring.
If you can handle all of this, then a faster, leaner, and more consistent approach to infrastructure management awaits you. An approach that empowers everyone involved in the software delivery process, helps developers launch new services faster, and can significantly reduce both time to market and time to value.
In conclusion, it’s important to understand that cloud infrastructure provides the foundation for your entire business. By taking the path of least resistance, accepting fragility and not giving it enough strategic attention, you increase risks and increase costs in the future.
Participate in a two-day online intensive “Making immutable infrastructure with Packer and Terraform”
Learn more about the course DevOps Practices and Tools