
mmuthigani
Published on 05/30/2024
A DevOps engineer is an IT generalist who should have a wide-ranging
knowledge of both development and operations, including coding, infrastructure
management, system administration, and DevOps toolchains.
Roles and responsibilities
The role of a DevOps engineer will vary from one organization to another,
but invariably entails some combination of release engineering, infrastructure
provisioning and management, system administration, security, and DevOps
advocacy.
Release engineering includes the work required to build and deploy
application code. The exact tools and processes vary widely depending on many
variables, such as what language the code is written in, how much of the
pipeline has been automated, and whether the production infrastructure is
on-premise or in the cloud. Release engineering might entail selecting,
provisioning, and maintaining CI/CD tooling or writing and maintaining bespoke
build/deploy scripts.
Infrastructure provisioning and system administration include deploying and
maintaining the servers, storage, and networking resources required to host
applications. For organizations with on-premise resources this might include
managing physical servers, storage devices, switches, and virtualization
software in a data center. For a hybrid or entirely cloud-based organization
this will usually include provisioning and managing virtual instances of the
same components.
DevOps advocacy is often undervalued or overlooked entirely, but is
arguably the most important role of a DevOps engineer. The shift to a DevOps
culture can be disruptive and confusing to the engineering team members. As the
DevOps subject matter expert, it falls to the DevOps engineer to help
evangelize and educate the DevOps way across the organization.
Top 9 DevOps Engineer Skills
The technical skills required of a DevOps engineer will vary depending on
the team structure, technologies, and toolsets in use. Yet strong communication
and collaboration skills are essential. It’s also important for a DevOps
engineer to have a solid understanding of all the components of a delivery
pipeline, and to know the pros and cons of available tools and services.
1. Communication and collaboration
It’s important for a DevOps engineer to communicate and collaborate
effectively with teams, managers, and customers. These so-called “soft-skills”
are often overlooked and undervalued, but the success of DevOps relies heavily
on the quality and quantity of feedback across the entire value stream.
2. System administration
A DevOps engineer will have experience with system administration, such as
provisioning and managing servers, deploying databases, security monitoring,
system patching, and managing internal and external network connectivity.
3. Experience with DevOps tools
Since using the right tools are essential to DevOps practices, the DevOps
engineer must understand, and be able to use, a variety of tools. These tools
span the DevOps lifecycle from infrastructure and building, to monitoring and
operating a product or service.
4. Configuration management
DevOps engineers will often be expected to have experience with one or more
configuration management tools such as Chef, Puppet, or Ansible. Many
organizations have adopted these or similar tools to automate system
administration tasks such as deploying new systems or applying security patches
to systems already running.
5. Containers and container orchestration
With containerization, a technology popularized by Docker, the code for the
application and its runtime environment are bundled in the same image. This
makes traditional configuration management tools less necessary. At the same
time managing containers brings its own challenges, and experience with the
class of tools known as “container orchestrators” (e.g. Docker Swarm or
Kubernetes) becomes a necessary skill for the DevOps engineer.
6. Continuous integration and continuous deployment
Continuous integration and continuous Delivery (CI/CD) are core practices
of a DevOps approach to software development, and enabled by a host of
available tools. The most fundamental function of any CI/CD tool or set of
tools is to automate the process of building, testing, and deploying software.
DevOps engineers will usually need experience with configuring and
deploying one or more CI/CD tools, and will usually need to work closely with
the rest of the development organization to ensure that these tools are used
effectively.
7. System architecture and provisioning
A DevOps engineer should have the ability to design, provision, and manage
computer ecosystems, whether on-premise or in the cloud. It’s important to
understand Infrastructure as Code (IaC), an IT management process that applies
best practices from DevOps software development to the management of cloud
infrastructure resources. A DevOps engineer should understand how to model
system infrastructure in the cloud with Amazon Web Services (AWS), AWS
CloudFormation, or Terraform.
8. Familiarity with coding and scripting
Many traditional system administrators have experience writing shell
scripts to automate repetitive tasks. A DevOps engineer should go beyond
writing automation scripts and understand advanced software development
practices and how to implement agile development practices such as code reviews
and using source control.
9. Collaborative management skills
Cross-team collaboration is a fundamental component of an effective DevOps
strategy, regardless of the specific organizational structure. Whether the
engineering team is a group divided only by roles or there are separate teams
for feature development, quality assurance, DevOps, etc., the DevOps engineer
should work across the organization as coach and co-worker, with many different
people.
For example, one of the most valuable returns on a DevOps investment is the
ability to deliver faster feedback to developers. A DevOps engineer will often
have to work with QA (whether they be manual testers or developers who write
test automation) to improve the speed, efficacy, and output of testing
methodologies.
At the same time, developers may need support from DevOps engineers when
working to improve the process of building and deploying application code.
The DevOps team: other roles and responsibilities
-
DevOps evangelist
This is a DevOps expert who promotes and develops DevOps practices across
the organization. The DevOps evangelist will typically have a strong technical
background, but the focus of the role is on interpersonal communication and
process improvement.
-
Release
manager/change advisory board
Organizations that have not transitioned to DevOps or are still in the
early stages of doing so might have a separate group called the change advisory
board (CAB) or an individual release manager role.
The purpose of such roles is to ensure that any new application software
being released into production meets quality and security standards and has the
appropriate management approvals.
These roles were particularly important when software releases were more
risky. However, these roles are less important (if not obsolete) with the use
of strategies like automated testing and dark deployments.
-
Automation expert
Every DevOps engineer is expected to have expertise in automation. Yet it
is not unheard of for an organization to have a separate automation expert or
automation engineer role. This may be someone whose focus is to manage the
CI/CD tooling or develop and maintain automated test suites.
-
Software
developer
In most cases the title software developer is given to individuals who
write either front-end or back-end application code, or both. These are the
people who have been historically described as “computer programmers” before
the rise of agile thinking.
-
Quality assurance
The quality assurance (QA) team is responsible for finding failures in
software. QA engineers historically focused on manually testing new application
code to ensure that it doesn’t immediately blow up (“smoke testing”), break
existing functionality (“regression testing”), or conflict with any other new
features (“integration testing”).
Organizations are increasingly supplementing or replacing manual testers
with the software development engineer in test (SDET) role. The SDET focuses on
testing new application code before its release into production. However,
rather than testing software manually he/she focuses on writing test automation
code.
-
Security engineer
Organizations that haven’t embraced the notion of fully integrating
security and compliance concerns into their planning and development processes
will often have an individual or team that is responsible for security. This
often proves to be an antipattern because it makes security an afterthought,
and it is much harder to secure software after it has been designed, built, and
deployed than it is to design with security in mind.
mmuthigani
Published on 05/30/2024
mmuthigani
Published on 02/10/2024
mmuthigani
Published on 01/12/2024