Processes and tools matter, but it's people that will ultimately determine whether a business can successfully transform itself into a DevOps organization. Regardless of how you organize DevOps roles -- whether you form a dedicated team of specialists or you weave DevOps skills into existing job responsibilities -- make sure that your organization has the following domains of expertise in place to speed you on the way to DevOps success.
Code is at the core of DevOps processes, and the people who write code are at the core of a DevOps organization. What's complicated is that not all developers are equally suited to DevOps practices.
Ideally, your DevOps strategy is powered by developers who have two main traits. First, they are flexible in their development tool set. They know a variety of programming languages and are familiar with different app development strategies, such as Agile methodology. This flexibility will help your team to adjust and improve on a continuous basis.
Second, developers who support DevOps must have at least a working understanding of what happens to code after it is deployed. They need not be system administration experts, but they should know how to manage production environments and recognize the complications that IT teams face as they manage code after its deployment. This knowledge is required to break down the silo structure that separates development from IT operations.
As the ops in DevOps, IT engineers are essential to the process. DevOps requires systems admins who are competent in IT operations, but ideally they are more than that. They understand the software development process workflows and can collaborate with developers to reduce the friction that occurs when developers hand off code for deployment.
Look for IT engineers who know how to code. Ideally, they'll have experience writing not just simple system administration scripts, but application code as well.
DevOps requires no specific type of architecture. Success isn't determined by whether you host workloads on premises or in the cloud, and it won't necessarily matter which OSes you use. Still, a team that wants to design a DevOps-friendly architecture should keep certain goals in mind.
Because automation is foundational to DevOps, choose systems that can be provisioned automatically. You'll want to achieve architectural flexibility, so that an architecture doesn't constrain the DevOps team's ability to improve practices on a continual basis. Build resiliency, redundancy and automated failover into system architectures; these features mitigate the disruptions caused by the inevitable failures that will occur during continuous integration/continuous delivery (CI/CD) cycles. Knowing the ins and outs of configuration management is a plus as well.
Systems architects who understand these requirements play an important role in a DevOps organization.
Although developers have become more directly involved in software testing in recent years, quality assurance (QA) engineers still play a valuable DevOps role.
QA engineers focus specifically on how to define quality standards for performance, reliability and other factors before software is pushed into production. It is their responsibility to design and run tests that assess whether each new release meets those requirements as it flows through the CI/CD pipeline.
In some ways, the work performed by QA engineers might seem at odds with other DevOps goals. Inefficient software testing introduces delays to the CI/CD process, which hampers the fundamental DevOps goal of continuous delivery. To support DevOps most effectively, QA engineers should understand how to uphold software quality and create minimal disruptions for other DevOps processes. There are a variety of ways to do this.
One technique is to embrace shift-right testing for noncritical features. This allows some tests to be performed after code is deployed, which reduces the number of tests that run predeployment and gets new releases into production faster. This strategy would be inappropriate for critical features -- those should be tested before deployment -- but it works well for testing smaller application components that will not lead to serious problems if they turn out to fail a post-deployment test.
Good QA engineers can also write efficient tests that run quickly and automatically. They should know the ins and outs of test automation frameworks, such as Selenium, and be skilled in how to write tests that cover a lot of ground but that don't require a long time to run. They must also know how to interpret test results quickly and communicate to developers how to fix whatever caused the failure. Effective communication in this regard between developers and QA engineers is essential to maintain the CI/CD pipeline flow even when a test fails.
User experience engineers
User experience engineer is not necessarily a DevOps role that immediately comes to mind. An expert who can ensure that software pleases end users, though, adds value to your DevOps process.
This is especially important because it's easy to fixate on the technical aspects of DevOps, such as how often a team releases software or how many tests it runs per release cycle. The goal should not be to merely deliver good software that meets users' needs -- you want software that satisfies users. User experience engineers can help the rest of the DevOps team maintain that focus.
Security engineers -- specifically, ones who understand DevSecOps and can put its tenets into practice -- are another core part of a DevOps organization. They bring a specific and important set of skills to the process.
To enact DevSecOps, an organization must set up tools and processes that allow developers, security engineers and IT professionals to participate in security operations. All three groups of stakeholders should have visibility into security problems so that they can counter those problems in a collaborative manner. Likewise, developers should be prepared to communicate with security engineers early and often to help design code that is secure from the start. IT engineers should work closely with the security team to ensure that their deployment and management processes follow best practices with regard to application and infrastructure security.
Not everyone will understand what DevOps means or why the organization should invest in the new tools, processes and people necessary to support it. A DevOps evangelist can help smooth over objections to the technology and organizational changes that DevOps adoption demands, and can also provide general guidance on what it takes to build a DevOps-centric culture.
In most situations, this work is more of a DevOps role than a job description. Select a few team members who fill other DevOps roles and ask them to serve as DevOps champions for the organization. The best ones will step up eagerly.
Nontechnical DevOps roles
To get the most out of DevOps, a business should engage other teams within the organization, even those whose members aren't in technical roles. Sales and marketing teams, for example, should understand how DevOps' benefits can reinforce sales and marketing goals. Legal teams may need to plug into DevOps processes to ensure that software remains compliant even as it is released continuously.
This is not to say that every employee in your organization needs to know the ins and outs of DevOps and software requirements. Nonetheless, it is worth building strategic connections between the core DevOps team and colleagues in nontechnical roles.