Special Delivery One, the Essential Skills to Become a Dev Ops Engineer ( Above)

Special Delivery One, The Essential Skills to Become a DevOps Engineer (Above) #

Hello, I’m Shi Xuefeng, and today we are on the “Special Broadcast” segment. Many messages have asked, “What skills and technology stack are required for the position of DevOps expert? What is the career path like?”

I believe these must be the most concerning questions for students who are just starting to learn about DevOps. After all, from a practical perspective, everyone wants to get hands-on experience as quickly as possible. So today, I’m here to talk to you about the essential skills and learning path for a DevOps engineer. But before that, let’s first understand the responsibilities of a DevOps engineer.

According to a report released by LinkedIn, the world’s largest professional networking site, in 2018, the most in-demand job positions globally were DevOps engineers, enterprise account managers, and front-end developers. Among them, DevOps engineer ranked first.

Interestingly, the Developer Survey Report of Stack Overflow, the world’s largest knowledge sharing platform in 2019, showed that DevOps engineers ranked third in terms of salary, only after technical managers and site reliability engineers (SREs). In last year’s survey report, DevOps engineers even ranked second in terms of income.

Whether it’s the demand in the talent market or the level of income, these signs indicate that DevOps engineers have become one of the hottest positions today, with incomes reaching the top of the IT industry pyramid. No wonder more and more people are starting to explore and learn DevOps.

However, DevOps, as a “new thing” that emerged just 10 years ago, is not like a specialized technology that has a relatively clear learning path and classic learning materials. For example, if you want to learn Java, you can start with “Thinking in Java.”

In addition, DevOps seems to have an ambiguous relationship with all aspects of software engineering. Let me share with you a DevOps skill development roadmap. According to this roadmap, you need to start with programming languages, understand operating system principles, system performance, network security, infrastructure as code, CI/CD, operations monitoring, cloud technology, and so on.

Image source: https://roadmap.sh/devops

What do you think? Do you feel overwhelmed when you see all these terms? If you want to master all of these technologies, you would need to be at the level of a CTO. For ordinary people, this is not very realistic. After all, “knowing a little bit of everything but not specializing in anything” is a taboo for IT practitioners on the career development path.

To clarify this position, the key is to answer three questions:

  1. What are the main responsibilities of a DevOps engineer in a company?
  2. What are the core skills needed to better fulfill these responsibilities? Especially considering the companies I have encountered, what are the most in-demand skills currently?
  3. Is there a reference path for learning and mastering these skills?

Next, we will focus on discussing these topics.

Responsibilities of a DevOps Engineer #

There has always been a lot of controversy surrounding the role of a DevOps engineer. Many people believe that DevOps should be a culture or practice rather than a new job position or department, as this can create collaboration barriers within a company.

In fact, I don’t think it’s necessary to focus on the title, because often DevOps overlaps with existing roles within the company. For example, development becomes DevOps development, and operations become DevOps operations. Additionally, the job titles for similar roles vary greatly among different companies. For example, in DevOps status reports, DevOps and Site Reliability Engineering (SRE) are grouped together for statistics. In the departments responsible for implementing DevOps in companies, I have seen teams such as Engineering Efficiency, Operations, Pipeline, and even Project Management. It can be seen that there are also differences in how different companies define the responsibilities of a DevOps engineer.

However, regardless of the above, I believe that when discussing the responsibilities of a DevOps engineer, in addition to the content of their main job, at least three additional aspects should be emphasized:

1. Tool platform development

There should be minimal controversy regarding tool platform development, and this is often the starting point for many companies to implement DevOps. Because tools are the carriers of automation, and automation can be said to be the soul of DevOps. As companies grow larger, the cost of collaboration within development teams also increases. The level of capability of the tool platform determines the upper limit of a company’s delivery capabilities.

However, the problem is that due to various reasons, many companies only have various scattered tools instead of a complete set of collaborative development platforms. This itself restricts the improvement of collaboration efficiency. Imagine that developers have to “jump around” in various systems every day, with many functions being duplicated. Clearly, this is a waste of time.

For example, you may have already conducted code reviews on the code hosting platform, but then on the test platform, there is still a mandatory field asking, “Have you conducted a code review?”. Isn’t this frustrating? The main reason behind this is a lack of top-level design or a lack of individuals or teams responsible for this. In this case, each team fights their own battles. When they find a pain point, they develop a tool for it, when they encounter a scenario, they introduce a system. In addition, the performance evaluation indicators favor creative work from scratch. It’s not surprising that everyone wants their own systems. However, if this trend is allowed to continue, internal duplication will become unavoidable.

Therefore, for DevOps engineers, in addition to focusing on refactoring existing tools and developing new features, they should pay attention to the entire software delivery process and integrate existing tools comprehensively to achieve a controllable end-to-end automation. This means pursuing not only a set of individual tools but also an entire toolchain that covers the complete software delivery process.

Additionally, the tool platform is also a carrier of standardized processes and DevOps practices. Therefore, when designing and implementing it, these practices need to be considered. For example, in the field of configuration management, everything should be included in version control. When building a tool platform, this awareness needs to be maintained. For example, record every configuration change version in the pipeline and support quick retrospectives. 2. Implementation and Practice of Processes

Secondly, whether it is the promotion and implementation of tool platforms or the improvement of processes in conjunction with the platform, there needs to be someone to do it. After all, even with the same tools, their effectiveness can vary greatly in different hands, and there are also many people who turn good agile management tools into waterfall models. Optimizing the processes themselves is also an effective way to improve collaboration efficiency.

For example, in some companies, manual execution is required for unit testing. So when the tool platform is capable of automated execution and can generate corresponding reports, this part of the operational process should be completed online. For example, in the past, obtaining an environment required a strict online approval process. When environment management becomes automated, these processes can be turned into self-service through the tool platform, enabling cross-functional collaboration and achieving process optimization goals.

Furthermore, some companies I have encountered tend to promote the implementation of DevOps without changing their processes. To be frank, this idea is not realistic. If there are no constraints in the process to hold development and testing accountable for the results, why should development take shared responsibility with testing? And how can they avoid blaming each other when problems occur? Therefore, if you are responsible for process improvement within the company, when encountering problems, you should ask “why” more and find the root cause, then combine the process with the tools to make improvements on both fronts.

Therefore, advocating the principles and practices, training internal employees, continuously exploring and discovering potential optimization points in the process, these are all things that DevOps engineers should consider.

3. Technical Research and Pilot Projects

Finally, various new technologies and tools emerge one after another. Which ones are suitable for the company’s existing business, and which ones are pitfalls? If they are suitable, how to integrate them with the company’s actual situation and evaluate potential tools and solutions, instead of blindly following industry best practices? Important but not urgent matters like identifying and repaying technical debt, when is the appropriate time to address them?

Additionally, if a company decides to implement unit testing, what framework to choose, what standards to establish, what metrics to select, and how to progressively advance? These also test the team’s capabilities greatly. If the steps are too big at once, it may end up being a formality.

You may think that you are just a small developer or operations personnel, how can you promote such a big thing? But in reality, DevOps is never the responsibility of a single person or role, but rather a shared responsibility of the entire development and delivery team. Within your capabilities, such as within your department, promote the concept of DevOps and provide technical training, encourage leaders to participate in industry conferences, take a step forward when collaborating with upstream and downstream teams - these are the capabilities that self-service teams, advocated by DevOps, should possess.

Key Skills for DevOps Engineers #

After discussing the responsibilities of a DevOps engineer, let’s now take a look at the skills required for being a DevOps engineer. From a practical perspective, I have summarized the core competency model for DevOps engineers.

The competency model is divided into two aspects: technical skills and general skills. Technical skills, also known as hard skills, are specific abilities that IT professionals possess, similar to how software engineers can write code, directors can make movies, and drivers can drive. On the other hand, general skills are more like soft skills, which are not limited to any specific position or profession but are abilities that everyone should strive to develop. Many times, when hard skills reach their limit, the differences in soft skills will determine a person’s future trajectory, making them highly important.

Soft Skills #

Let’s start with soft skills. Before discussing specific soft skills, let me share a story with you.

I once heard this saying while abroad: in companies, engineers of Indian heritage often have higher positions than engineers of Chinese heritage. Why is that? I used to lead a cross-border engineering team between China, the US, and India, and I found that every time I assigned a task to Indian engineers, they could always deliver a clear and well-designed PowerPoint presentation quickly and excellently. I specifically asked them how they managed to do this. It turned out that they had received training in this area during their studies and had practiced skills such as expression and public speaking. It is evident that there is a reason behind everything, and soft skills are crucial to personal development.

So, as a DevOps engineer, what soft skills should one possess?

1. Communication Skills

Communication skills are ranked at the top of the list for soft skills, as communication and collaboration are the core concepts advocated by DevOps.

In the process of implementing DevOps, you need to possess the ability to communicate upwards, downwards, and horizontally. Communicating upwards involves refining the DevOps implementation framework and its value, seeking support from senior management. Communicating horizontally involves breaking boundaries between teams and establishing cross-team collaboration. Communicating downwards involves guiding the team to rapidly improve platform tool capabilities, demonstrating the significance and value of the work, and enhancing everyone’s initiative. As you can see, daily work is filled with a large amount of communication.

It is important to note that communication skills are not limited to language skills; often, communication between development and operations is accomplished through code. Therefore, having good commenting style and clear, structured ways of describing things can also improve communication efficiency.

For example, there is a very DevOps-friendly communication method called ChatOps. It is a form of conversational operations represented by GitHub’s Hubot and gradually extends to a form of human-computer interaction. By establishing a common communication language, barriers between development and operations can be broken.

2. Empathy

DevOps encourages teams to share goals and responsibilities. But in reality, which team wouldn’t want to work more automated and efficiently? Therefore, DevOps engineers should be able to look at problems from the perspective of others, think about their difficulties, and consider what they can do to help them. This empathy is also a necessary skill to bridge team differences and build a good collaborative culture.

In addition, cultivating a user-centric mindset within the team is also a good approach. Here, the user refers to the departments that have a delivery relationship in the delivery process, rather than external users. When delivering a version, efforts should be made to do the best job possible, rather than simply delivering without much consideration.

I must emphasize again that empathy can only take root and grow with process and mechanism guarantees.

3. Learning Ability

DevOps engineers need to have a broad understanding of various things. Therefore, the ability to learn new skills quickly within a limited time and the willingness to actively improve and enhance oneself are also essential.

In the eyes of DevOps engineers, there is no “perfect”. For example, perfect processes, perfect technical implementations, perfect software architectures, etc. They seem to have an inherent ability to identify issues and always think about how things can be done better. However, in reality, without continuous thinking, learning from external best practices, and open communication and exchange, it is impossible to know that there is a better way of working. Quoting a saying from the quality management master Dr. Edwards Deming:

Don’t just do the same things better - find better things to do.

Many times, we are waiting for the perfect moment. For example, you want to learn a new skill, but you are waiting for all your work to be completed, no one to disturb you, and a large chunk of time to invest before starting to learn. However, in reality, when would there ever be so many ideal conditions? Real learners learn during the process of creating conditions when conditions are not yet ready. Therefore, if you want to start learning DevOps, my belief is that there is only one principle: start taking action first.

Summary #

Today, I introduced the prospects of a DevOps engineer to you. It can be said that it is currently the golden age for this position. I also introduced the main responsibilities of a DevOps engineer, including tool platform development, process implementation, and technical research and exploration. These are all additional considerations on top of the primary job duties. In terms of personal skill requirements, I emphasized three soft skills. I hope you always remember that soft skills are not about playing around, but are highly important for personal development in the future.

In the next lecture, I will share with you the essential hard skills and growth path for a DevOps engineer. Please stay tuned.

Thought Questions #

Does your company have a DevOps engineer position? What are their responsibilities? What other soft skills do you think are essential for a DevOps engineer?

Feel free to share your thoughts and answers in the comments section. Let’s discuss and learn together. If you find this article helpful, please feel free to share it with your friends.