15 Must-Have Skills of a DevOps Engineer
Posted by Walid Abou-Halloun Date: Aug 31, 2018 8:54:38 AM
Development Operations or DevOps is at the cutting-edge of software development methodologies. It is the fusion of building a project and running it at the same time.
Companies are bringing down the walls that separate the creators, the testers, and the operators within the enterprise. And a DevOps engineer brings all these disciplines together in one package.
They are the embodiment of the operations of the company. But what competencies actually make up the DevOps skillset?
Keep reading for a rundown of some essential skills the modern DevOps engineer needs today.
1. Coding for DevOps Engineers
First and foremost, a DevOps engineer is a computer programmer. They know how to write software from scratch using various programming languages.
There is no specific language that DevOps engineers use. In fact, you can take a DevOps approach using any software. You can do DevOps without using a computer; just strictly UML or some other modeling paradigm. There are no rules.
Both compiled and scripting languages are used. It is not uncommon to use a compiled language like C++ for the application, and a scripting language like Gherkin to do the testing. Other engineers use the same language for coding and testing, with integrated frameworks like JUnit or Codeception.
Of all the skills required for DevOps, nothing is more important than being able to code software. Even if that role is specifically delegated, it’s still important for the lead engineer to be able to write code.
2. Test–driven Development
Test-driven Development (TDD) is a software development methodology. It is a technique used to create code. Compare TDD to “waterfall” which is a totally different software development methodology.
Automated tests are an essential element of TDD. Although TDD isn’t the only paradigm that uses automated testing (i.e. waterfall). An automated test is using a computer program to test another computer program.
In TDD, the programmer takes a “test first” approach. That is, they create failing tests before they touch the actual code in the system. This seems totally counter-intuitive at first (testing something that doesn’t exist?), but it really is the best method for creating modern complex software.
By writing the test first, the programmer spells out EXACTLY what they are supposed to do next. There is a complete lack of ambiguity. The test either passes or fails; green or red.
When the project is complete, the team has a total regression test suite! That is, in the future when changes are made, the testing suite will be able to respond and adapt to the changes without having to start from scratch.
A regression test suite tests that new changes don’t break something within the old code somewhere. You basically have to test everything in the system when you make a change. By taking a test first” approach, the team does, in fact, test everything, so the regression suite builds itself.
3. Behaviour-driven Development
Behavior-driven Development (BDD), has been described as Test-driven Development done right. BDD is a special technique in TDD, that is, BDD is a subset of TDD.
BDD is TDD, but TDD doesn’t necessarily have to be BDD.
The primary concept of BDD is to focus on the behaviors of the system actors. Often the motivation (business value) or the activity is taken into account.
BDD can be written in the Gherkin language, which is a metaprogramming language that can be ported to many testing frameworks. However, Gherkin isn’t required for BDD at all.
4. Acceptance–test–driven Development
Yet another of the DevOps skillset that take a test first approach, ATDD is a way to test formal specifications that come from business stakeholders. The idea is to ask the business person, what would you accept as the definition of done?
Then an automated test is created, usually using a browser or some kind of simulator. If the test fails, then the programmer goes back and makes it pass. Rinse and repeat.
5. Cloud Deployment
Deploying into the cloud can now be considered one of the skills required for DevOps engineers. There are many cloud platforms, from the big ones like Amazon and Microsoft to smaller but equally powerful offerings from companies like Cloud9.
To deploy into the cloud requires specialty skills directly related to the platforms being used. Most of the big companies offer some kind of certification for their platform. A DevOps engineer should consider taking one of the courses since they aren’t very difficult, but they impart really crucial information related to their career.
6. Leadership Skills
DevOps engineers aren’t just computer programmers. They have to do the “ops” part, which means running the systems they invent. They have to manage people and money, and that gets more complex than the software really fast!
7. Business Skills
A DevOps engineer role has mixed responsibilities that create value to business projects.
The DevOps practitioner has to have the business skills to find a solution that all the stakeholders can get behind.
8. Domain–specific Skill
Beyond the general business skills required to operate today, the modern DevOps engineer has domain-specific skills particular to that business or field they are currently working on. If the engineer is working on a software for a farm, they need to go out and milk some cows.
9. Database Architecture
Usually, in an Agile team, or any kind of DevOps operation, there will usually be a database administrator as a separate role. Any DevOps engineer does need to at least understand the database architecture the system is using.
10. Security Best Practices
The complex field of security best practices is one of the most crucial aspects of the DevOps engineer’s role. It is also often a separate specialty role, especially in an enterprise. However, every engineer up and down the ladder must know security best practices.
11. Communication
A DevOps engineer needs to know how to communicate with different people with different temperaments. They go “over the wall” between the development and operations people. A DevOps practitioner has to know how to talk to both geeks and business people.
12. Corporate Culture
Another part of communication is learning how to fit inside the particular corporate culture the DevOps engineer is operating in. Whether they are an employee or a consultant, the DevOps operator needs to work with many different people in many roles.
13. Giving Presentations
Presentations are a major part of a DevOps engineer’s work. They have to communicate their vision to many different key people. A DevOps engineer needs to convince other people that their plan is going to work.
You’ll need to learn presentation software and speaking in front of small and medium-sized groups.
DevOps engineers are computer programmers, but sometimes a higher-level abstraction is required. Unified Modeling Language (UML) is a general-purpose, language that uses standardised graphical symbols to represent a complex system. UML is used in many disciplines and can be understood by anyone the first time they see it.
All the communication aspects of the DevOps engineering role sometimes seem very technical and dry. There is a tendency to communicate in plain text files and emails. That’s all fine and good, but even a real engineer sometimes needs to accentuate a certain aspect of his work with a little polish.
Learning how to use basic word processing and graphics tools like Gimp is rarely needed, but often an essential skill for a DevOps engineer.
14. Project Management
There is a lot of overlap between certain DevOps engineer skills and the project management skillset. A DevOps engineer needs to deploy resources, and time the project so that it moves forward in an efficient manner.
15. Shell Scripting
Shell scripting is another of the skills required for DevOps engineers. A “shell” is a program that allows the use (or a program) to enter commands directly to the operating system. Bash and PuttY are popular shell programs.
Shell scripting can be used to deploy computers into the cloud. You can perform activities on a local machine and automate maintenance with shells scripts.
Because shells generally don’t have very sophisticated capabilities, and because they can’t compile or preprocess (like PHP), shell scripts generally don’t perform complex computing operations. Those activities are usually sent to a more sophisticated system, like an executable program running on the server.
However, that doesn’t mean shell scripting can’t do powerful things! Some of the most complex systems in the world are shell scripts at the top of the stack. Shells can launch other programs and can link systems in sophisticated ways.
DevOps is the Future of Agile
People embody and act out the roles they believe in. A DevOps engineer is the living heart of a modern technology company. They are the ones who channel the future and brings it into the operations of today.
If you believe in your business, check out our blog to learn more about DevOps, and technology operations in general!