visit
Roles having DevOps in their title hardly share the same meaning. They often have something in common, though. They try to cover for what traditionally would have been the specialization of different professionals.
Don't get me wrong: cross-functional expertise is definitely important. But I don't think DevOps means replacing a multitude of specialization with a single role. Different specializations like operations, security, testing, development, product Management, and so on, are vast and require specific knowledge.
This is why I think the key differentiator of successful DevOps organizations is that they enable effective collaboration. They have as their clear North Star the goal of delivering value to the end user.Overall, I don't think we should be talking about a DevOps engineer, but rather about DevOps culture in organizations.
But let's take a step back first.“DevOps is a highly condensed way of referring to the combination of practices that aim at shortening the software development life-cycle, increase the feedback opportunities and facilitate continuous improvement and experimentation.”
— Alessandro Diaferia (@alediaferia) July 4, 2020
DevOps organizations incentivize different specialties to collaborate.
The intrinsic existing tension between Dev, making changes to the
system, and Ops, wanting to keep the system stable, dissolves. The
greater good is now the value stream.
Dev and Ops understand the importance of working together to maximize
this flow, to figure out which bets worked out and which ones didn’t.
Organizations that embrace the DevOps mindset can be more effective than the competition at experimenting with new functionality. They quickly
validate their assumptions, activating and deactivating functionality by flipping a switch on a dashboard.
DevOps Engineers are IT professionals who collaborate with software developers, system operators and other IT staff members to manage code releases. They cross and merge the barriers that exist between software development, testing and operations teams and keep existing networks in mind as they design, plan and test. Responsible for multi-tasking and dealing with multiple urgent situations at a time, DevOps Engineers must be extremely flexible.This is one of those classic examples where the organization believes that the DevOps principles should be delegated to a single team.
- A job spec on the internet
The spec mentions the myriad of duties that are the responsibility of
the DevOps engineers in the company. A DevOps engineer is expected to be responsible for “multi-tasking and dealing with multiple urgent
situations at a time.” Therefore, they must be “extremely flexible.”
Multitasking and dealing with multiple urgent situations at a time is,
for sure, likely to happen anywhere; I don’t think this should be a
peculiarity of a role in an organization. On the contrary, a healthy
environment empowers every engineer to handle urgent situations and .
Coming across this role, I’d think that the organization is not really
trying to adopt DevOps practices. Instead of encouraging people to
collaborate and improve, they’re building a dedicated team to throw
issues and urgent situations at.
“A DevOps engineer combines an understanding of both engineering and coding. A DevOps engineer works with various departments to create and develop systems within a company. From creating and implementing software systems to analysing data to improve existing ones, a DevOps engineer increases productivity in the workplace.”
— Another job spec on the internet
In a DevOps organization, engineers do work with various departments.
But what’s the point, then, of having a dedicated DevOps engineer role?
Do the other type of engineers not work with the various departments of
the organization? Do non-DevOps engineers not analyze data and improve
existing systems? Additionally, the job spec claims that a DevOps
engineer increases productivity in the workplace. How? Do they radiate
productivity?
“A DevOps engineer works with developers and the IT staff to oversee the code releases. […] Ultimately, you will execute and automate operational processes fast, accurately and securely.”
My favorite so far, this is quite a condensed one, but the release
aspect mentioned in it strikes me as particularly interesting.
I tend to separate the concept of deployment from the one of release.
Users experience product updates governed by a release policy that may
or may not be the same as the deployment policy. This really depends on
the strategy of the organization.
Regardless of this distinction, though, I believe that constraining the
capability of delivering value to the end user to a specific role
undermines the agility of an organization.
In general, a deployment should be a non-event: nothing special, just
another merge into the main branch that causes code to end up in
production.
In a fast-paced world like the one we live in, an organization shouldn’t constrain itself by requiring dedicated engineers to release new functionality. Modern environments require companies to always be experimenting. Organizations should empower non-technical teams to run
experiments, analyze data, and autonomously decide when to release new
functionality. All of this, ideally, shouldn’t require ad hoc intervention from a specific engineer.
Job specs like this one feel like they’re trying to repurpose the role
of the release manager to keep up with the latest trends, by just
changing a few words.
I don’t think release management goes away in a DevOps organization.
Rather, release management becomes ensuring that the rest of the
organization can be autonomous at releasing. Achieving this means
investing in automation and internal tools for the whole company
The DevOps Engineer will be a key leader in shaping processes and tools that enable cross-functional collaboration and drive CI/CD transformation. The DevOps Engineer will work closely with product owners, developers, and external development teams to build and configure a high performing, scalable, cloud-based platform that can be leveraged by other product teams.
This is the least bad of the job specs I’ve encountered. It describes a
set of responsibilities that usually pertain to a platform or
infrastructure team. Most of these teams often get renamed to DevOps
Team, and their members become DevOps engineers for fashion reasons.
The platform engineering team is the key enabler for organizations that
want to embrace DevOps principles. But thinking that they only pertain
to a specific team will hardly result in a successful journey.
This team will surely be responsible to build the relevant
infrastructure that enables the other teams to build on top, but they
can’t be left alone in the understanding and application of those
principles.
Equally, the product team should spend time understanding what new
important capabilities derive from adopting DevOps practices. Code
continuously flowing into production behind feature flags,
containerization technologies, improved monitoring and alerting, et
cetera, open endless opportunities.
We’ve just gone through a few job specs that look for variations of a
DevOps engineer role, and I’ve outlined what aspects I think are flawed
in those roles. But what should companies look for, then?
In the , Gene Kim mentions the Five Ideals of successful DevOps organizations. I think they're an effective set of principles to take the temperature of your organization in terms of DevOps practices. Those ideals are as follows:
What should companies be looking for then? I think the priority should
be on understanding what’s blocking them from fully embracing a DevOps
mindset across all departments. Most of the time, you’ll realize that
the set of skills you need is already there around you. What’s holding
you back is probably the current set of processes through which work
gets done at your company.
Specific DevOps knowledge in terms of technology, tools, and best
practices will be required, for sure, but it won’t be something a single role should be responsible for.
Previously published at