A mix of Process, Tools & Technologies
DevOps has come of age. It is now almost fully integrated with Development and Infrastructure. It is a necessity now. Rapid development, deployment & releases, shall work in tandem only if the processes that unite them are all automated. Questions on performance & security are on the rise when we take the cloud angle.
First, let us look at why DevOps and Agile are often mentioned together, then the challenges faced when we use Cloud Infrastructure and finally, what skills one must possess to be a successful DevOps professional.
DevOps and Agile
The one common thing about Agile and DevOps is that both help in accelerating the processes. There are other commonalities but then most of the time they are seen as one. This is not correct. Agile helps in bringing various stakeholders together in one platform with a clear view of what they would like to achieve together. Kanban & Scrum are variations of Agile but then the ultimate goal is continuous delivery.
"With the right skills, one can take best advantage of DevOps in Cloud. Get into DevOps & Cloud so that your Agile processes become more meaningful"
Now, let us talk about the DevOps confusion in the Agile world. DevOps simply automates processes related to Development & Operations. While both Development & Operations used to fight the battle of ownership in a typical software release cycle all along, the integration of these two has helped bridge that gap. There are several other advantages of DevOps but we are not going to discuss the details here in this article. We shall limit it to the confusion between Agile & DevOps.
In DevOps, there are many tools that automate the process in Development & Operations. In context with Agile, where we talk about continuous delivery etc, DevOps comes quite handy. So, if one has to have the best of Agile - Scrum/Kanban implementation, then it would be essential to have DevOps implemented. Else, the infrastructure would pull the whole system to a slow pace and shall defeat the purpose.
Therefore, it becomes essential to have a good DevOps setup while one follow Agile - Scrum / Kanban and then have both integrated into one.
DevOps in Cloud
DevOps takes full advantage of Cloud. If DevOps helps in automating the whole Development & Operations processes, the Cloud comes as a boon where companies have started adopting XaaS, Everything As A Service model.
Since there is more than one option for Cloud such as AWS, Azure etc, it is always a good practice to select a set of tools for DevOps which work in more than one Cloud environment. Yes, there are common tools.
Another important aspect is the Performance of Application in Cloud. It is a good practice to automate the performance testing. While the application itself needs to be tested for performance from its design to deployment stage, the Cloud platform needs to be tested for performance where the application is deployed. Various tools that are used in the Cloud Infrastructure may bring down the overall performance. You need performance close to a bare metal provision for a multi-tenant deployment. If not, the result will be a fat bill from the service provider!
DevOps and Cloud are complementary to each other. When you go to AWS or Azure, you will find that, most solutions are around DevOps. If your development is in Containers, then it can be easily deployed in a Cloud environment. Changes to applications & testing them makes it so simple.
After discussing DevOps Vs Agile, DevOps & Cloud, it is very important to understand the skill set needed to make it successful. So, what is the typical skill a DevOps Engineer must have?
My list of key skills is as below:
1.Understanding of Tools & Technologies:
It is a maze of tools that integrates with various technologies in DevOps. A good understanding of various Technologies is a must. It is not that important that one should know all the tools & technologies which is virtually impossible, but a good understanding of how each of the technologies work & integrate is a must. First comes Technology and then Tools. Let me explain with some examples:
The first step is to decide which are all processes you would like to automate such as Continuous Integration (VSTS, Jenkins, TeamCity etc), Infra Automation (Puppet, Chef etc), Deployment Automation (Jenkins, VSTS etc), Source Control (Git, TFS, Perforce etc), Cloud (AWS, Azure etc). As you notice for each of the process there are various options. Choosing the combination of each of the tools across various processes is a good skill to possess!
If I choose to implement / deploy a DevOps on Cloud then I have various choices such as AWS, Azure, Google Cloud Platform etc. When I choose one of these say AWS, then I get to work with a particular stack of tools which may be different from Azure. However, both set of tools may serve similar purpose.
2. Sense of Security:
Integrating various tools also brings in vulnerabilities in the system. Hence it is key to check for vulnerabilities across the system. Now a typical DevOps Engineer need not be a security expert but the ability to cover OWASP top 10 is highly recommended. If there is a separate VAPT team then it is better it is handled by them. However, an appreciation of security vulnerabilities is required so that it can be handled at the design phase itself.
While you need not be a Testing expert, you must know how to write code. Every tool integration point must be automated for Testing. If a new feature is added, all that you need to check is if any of the integration point is breaking.
4.Teamwork & Soft skills!
Well, yes! The job requires interaction with various stakeholders right from Design, Dev., Release Management, Deployment Team etc. Unless there is cooperation from each of the stakeholders, the DevOps model will be difficult to achieve. Hence, a DevOps Engineer needs to be flexible, work & collaborate seamlessly with various teams and cooperate with various stakeholders.
Since the job requires to collaborate with various departments / stakeholders, each one of them must be treated as a customer. Hence to improve one’s own self, it is a good practice to conduct Customer Satisfaction Surveys. This is recommended for very large Enterprises / DevOps deployments.
With the right skills, one can take best advantage of DevOps in Cloud. Get into DevOps & Cloud so that your Agile processes become more meaningful. However, an incorrect implementation will only lead to more chaos. Hence choose the right combination of tools right at the design phase itself.