Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

How to Be a Great DevOps Engineer

DZone's Guide to

How to Be a Great DevOps Engineer

Companies have realized the value of adopting DevOps in accelerating releases. Whoever innovates fastest wins—and frequent software updates are key to innovation.

· DevOps Zone
Free Resource

Download “The DevOps Journey - From Waterfall to Continuous Delivery” to learn learn about the importance of integrating automated testing into the DevOps workflow, brought to you in partnership with Sauce Labs.

The term "DevOps" was coined as a combination of developers and operations. According to Wikipedia:

DevOps is a term used to refer to a set of practices that emphasize the collaboration and communication of both software developers and information technology (IT) professionals while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably.

Every company today, regardless of industry, is under pressure to be great at developing and delivering software. This is because software is disrupting every type of business, from taxi services to food delivery to retail. Unless you transform your business and go through a digital transformation, your business is likely to die in the next few years.

Once you start this digital transformation, the next challenge is to innovate fast enough to survive and maybe win. This is where DevOps comes in. Most companies have figured out how to accelerate software development through Agile principles. However, the bottleneck is now software delivery. What is the point of producing code at a faster rate if you can't ship it out as quickly?

DevOps sets out to solve this problem by combining cultural change with end-to-end software delivery automation. The goal of DevOps is to ensure frequent, predictable, error-free software releases that help you innovate faster.

What Is a DevOps Engineer?

A major part of adopting DevOps is to create a better working relationship between development and operations teams. Some suggestions to do this include seating the teams together, involving them in each other's processes and workflows, and even creating one cross-functional team that does everything. In all these methods, Dev is still Dev and Ops is still Ops. 

The term DevOps Engineer tries to blur this divide between Dev and Ops altogether and suggests that the best approach is to hire engineers who can be excellent coders as well as handle all the Ops functions. In short, a DevOps engineer can be a developer who can think with an Operations mindset and has the following skillset:

  • Familiarity and experience with a variety of Ops and Automation tools.
  • Great at writing scripts.
  • Comfortable with dealing with frequent testing and incremental releases.
  • Understanding of Ops challenges and how they can be addressed during design and development.
  • Soft skills for better collaboration across the team.

According to Amazon CTO Werner Vogels:

Giving developers operational responsibilities has greatly enhanced the quality of the services, both from a customer and a technology point of view. The traditional model is that you take your software to the wall that separates development and operations, and throw it over and then forget about it. Not at Amazon. You build it, you run it. This brings developers into contact with the day-to-day operation of their software. It also brings them into day-to-day contact with the customer. This customer feedback loop is essential for improving the quality of the service.

It is easier than ever before for a developer to move to a DevOps role. Software delivery automation is getting better every day and DevOps platforms are making it easy to implement automation with minimal scripting.

Can an Ops engineer move to a DevOps role? Definitely, but it can be a little more challenging since they will need to learn serious coding skills before making that transformation. However, with the upsurge in a number of coding boot camps, it is probably an easier transition to make than it was a few years ago. 

A great way of gaining DevOps credibility is to become an AWS Certified DevOps engineer.

How Can You Be Great at It?

The key to being a great DevOps Engineer is to focus on the following.

Zero-Touch Automation 

The closer you can get to this idea of automating everything such as infrastructure provisioning, CI/CD pipelines, release management, security patching, and even customer feedback, the faster your organization can innovate. You'll eliminate messy manual handoffs and track down and fix bugs as soon as they're introduced. You'll also start doing incremental releases and getting fast feedback from customers, which in turn helps you improve your product and respond to market demand very quickly. This well-oiled machine is the ultimate nirvana of DevOps. 

DevOps platforms like Shippable and Xebia Labs help with achieving complete automation for your software delivery pipelines.

Org-Wide Ops Mindset

There are many common Ops pitfalls that developers need to consider while designing software. Reminding developers of these during design and development will go a long way in avoiding these altogether rather than running into issues and then fixing them.  

Try to standardize this process by creating a checklist that is part of a template for design reviews. Here is a checklist from Microsoft that takes into consideration Deployment and Infrastructure requirements.

End-to-End Collaboration

I am a firm believer in the 'Teams that play together work well together'. Encourage the team to get to know each other through team building events, cross team hackathons, and gamification. We found that even a simple thing like keeping all communication in public Slack channels open to everyone across teams helps with creating a better understanding and empathy for cross team problems.     

How Do You Measure DevOps Success?

Ultimately, all your efforts need to translate to the business goal of faster innovation. I'll write a broader post on this topic, but some key indicators that your DevOps strategy is succeeding are the following.

Deployment Frequency

How often do you deploy to production? With zero-touch automation, you can do continuous deployment with every change going to production. It's a process to get there, so starting with a goal of at least once a day is reasonable. 

Lead Time for Code Changes

How much time does it take for a code change to be deployed to production? This measures efficiency of your automation pipelines. The idea here is less than 30 minutes, but you need to determine where you need to be.

Rollback Rate

How often do you need to rollback deployments due to errors? This means your automation need to be improved since the entire goal of DevOps is to create predictable and error-free releases. 

If your rollback rate is high, you might want to track is how fast you can rollback after a problematic deployment. This will ensure that you can quickly recover from a bad deployment without much customer impact.

Great DevOps engineers are hard to find, and it is still an evolving field. Many companies that advertise for these roles don't really have a clear understanding themselves of what it entails. So, if you're hired as a DevOps engineer, it might be up to you to drive these changes and ensure DevOps success.

Discover how to optimize your DevOps workflows with our cloud-based automated testing infrastructure, brought to you in partnership with Sauce Labs

Topics:
devops ,devops adoption ,career ,devops engineer

Published at DZone with permission of Manisha Sahasrabudhe, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}