In guiding our customers through the journey of implementing and optimizing around best practices in DevOps, we suggest a view that an application comprises three types of code. In this post I aim to describe these three code types and outline the value of understanding them in applying DevOps processes to Infrastructure and Operations (I&O) management and technology usage.
The central idea is that, broadly speaking, any given application is made up of three types of code; they are: 1) feature code, 2) infrastructure code, and 3) reliability code.
Infrastructure code is, as the name would suggest, code that relates to infrastructure configuration. Not absolutely all infrastructure configuration information will be included here. Generally the consideration includes changes and interactions required to manage and maintain your IaaS or Paas solution in order for your application to be deployed. Historically a lot of this type of configuration work has been completed by and Infrastructure and Operations team using manual GUI based steps which can be slow and prone to error. This has led to the DevOps guiding principals of Infrastructure as Code (IaC) and Automate the Delivery Pipeline described in the VMware Whitepaper DevOps and Agile Development.
The Infrastructure Code base will also often include configuration code related to governance and compliance of the application.
Reliability code is used for configuration of systems that an application requires to both demonstrate and maintain reliability. This can be systems such as monitoring and telemetry systems that need to be configured when an application is deployed to display performance and error information. Application specific automated healing systems and predictive and reactive application scaling systems also fall under this category. Some organizations will have a dedicated team that write this code, often called a Site Reliability Engineering team. Those familiar with the discipline of Site Reliability Engineering will be aware of the guidance that Site Reliability Engineering practitioners should spend around 50% of their time on engineering tasks, this is the type of code they would be working on. Other times the reliability code will be the joint responsibility of Infrastructure and Operations along with the Application Developers.
In working towards the guiding principle of Immutable Infrastructure described in the VMware Whitepaper DevOps and Agile Development we need to ensure that our application can be deployed in a completely automated fashion without any manual intervention. This means we need to consider all code required to deploy an application. All three types need to be version controlled tested and validated. They come together to run the application but they are obviously different in terms of what it takes to write, manage and maintain There may be a single team with responsibility for the all the types of code or there may be multiple teams the work together to create the codebase that makes up the entire application. In addition, when any of the application code is updates or changed the entire code base must be tested as a change in any of the three types of code can have implications for the overall application.
There are of course exceptions and grey areas. This three types of code model is merely a way of conceptualizing what makes up an application. It’s not necessary to analyse weather a particular piece of code is Reliability Code or Infrastructure code. It can also be helpful when thinking about how the Site Reliability Engineering discipline fits in to the DevOps model.
A DevOps transformation journey can be daunting and complex, making sense of all the terms and how they relate to your applications can be challenging enough let alone implementing them. Considering the model of the three types of code that make up an application and how it relates to your specific applications and infrastructure will be useful in beginning or continuing on your journey of applying the guiding principals of DevOps.
James Wirth is a member of the emerging technologies team within VMware Professional Services and focuses on DevOps, Site Reliability Engineering, Multi-Cloud architectures and new and emerging technologies. He is a proven cloud computing and virtualization industry veteran with over 15 years’ experience leading customers through their cloud computing journey.