Companies today have realized the immense value of adopting DevOps principles in accelerating software releases. After all, whoever innovates fastest wins, and frequent software updates are key to faster innovation.
What is DevOps?
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 helps 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
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 like Shippable are making it easy to implement automation while also giving you a Single Pane of Glass view across your entire CI/CD pipeline.
Can an Ops engineer move to a DevOps role? Definitely, but it can be a little more challenging since you will need to learn design and programming skills before making that transformation. However, with the upsurge in number of coding bootcamps, it is probably an easier transition to make than it was a few years ago. Ops engineers can bring much needed insights into how software design can cause Ops challenges, so once you get past the initial learning curve for design/coding, you're likely to become a valued 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 ideal 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.
Shippable can help you build this automation across a wide variety of programming languages, tools, deployment targets, with minimal scripting. It is basically a platform for devops-automation-as-declarative-yml.
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 create a checklist that is part of a template for design reviews.
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:
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 ideal 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.