Moving Towards DevOps (Part 1)
DevOps and My Career
DevOps is the buzzword of the (young) century. It’s thrown around in resumes, tech conferences, and at meetups. There’s a shift in organizations towards DevOps — but what does this mean? Sure, maybe you’ve heard it’s not all about technology, but instead — it’s all about culture, people, process or tools. But what does it mean for you and your career, or for your team, project or company? How does someone move towards DevOps when there isn’t even a clear definition?
My goal here is to help the reader understand steps to take, tools to learn, and keys to focus on, in order to move towards a DevOps role or improve personal DevOps capabilities. I won’t attempt here to give a deep or new definition to DevOps. However, I do hope to shed some light on what DevOps is not, and to share steps to improve DevOps skills for a career. In Parts 2 and 3, for a team or project, and for a company or enterprise.
Let’s start with what DevOps is not. DevOps is not just about tools, or cloud, or a role or team of specific skills. A ‘DevOps Engineer’ is not really a thing — it’s not a job or a role, simply because companies are hiring them or techies are calling themselves that. And ‘DevOps Team’ is a hip term, but sorry — also not a thing. Engineers and teams are not DevOps — they do DevOps; that is, what they do enables DevOps by embracing its principles and applying its practices.
DevOps is the application of Agile principles to the entire delivery service, in a collaborative way, affecting culture and technology, and it helps to break down the traditional barriers that exist between development, testing and operations — removing silos. DevOps does have integral components at its core, like delivery pipeline automation, configuration management, regular code integration, automated monitoring/health checks,and Infrastructure as Code. But it’s much more than that.
It’s more about how we are delivering software products, than what we are doing to deliver, and with what resources or tools. DevOps needs to be applied and realized cumulatively through the use of tools, principles, practice and methodology. With the arrival of cloud comes the ability to get things to the target environment faster — and thus to the customer faster — by leveraging the cloud’s power. Likewise, with the introduction of Agile, and Lean thinking, to processes and teams involved in software delivery comes the need to have a culture and toolset around processes to match that Agile velocity.
So, You Want to Work in DevOps
DevOps is obviously a hot topic in the technology industry with big companies like Netflix, Spotify, Etsy and Walmart utilizing this portmanteau structure. Shifting a traditional IT career into a DevOps career is much more complicated than a few tweaks to your resume. To shift career trajectories and become a DevOps professional, you need to develop not only your technical and hard skills but also your soft skills. DevOps is not just about technology but also requires a fine-tuned balance of collaborative working styles, strong listening skills and a willingness to change your perceptions and outlook on development and operations themselves.
DevOps Concepts and Hard Skills
What are the hard skills needed for a DevOps career? Networking, storage, databases, coding — these tend to be taken for granted in the technical skillset bucket — however, they can still be improved upon and shouldn’t be ignored. In a DevOps career, these are all critical in daily tasks.
It’s critical to have at least a basic understanding of Source Code repositories, such as Git, and version control, and their place and importance in a DevOps culture. This is a necessary starting point, a prerequisite for the other parts of a DevOps technical process. Personally, I found this challenging as I started my DevOps career.
Initially, I focused on the drawbacks of the Software Configuration Management (SCM) tool I was forced to use — an archaic, file-centric, centralized SCM, not conducive to DevOps practices — and allowed that to drown out the DevOps principles. It became very clear to me that adaptation was necessary in order to add DevOps value, as well as progress in my own career. My success in adapting happened after I re-focused on DevOps principles, geared the SCM’s available functionality to achieve those principles, and collaborated with other team members to make it happen. If I was locked in to the tool, it would have been impossible to adhere to key DevOps principles of small, frequent code builds with automated testing. Instead, I looked for ways to apply those principles to the SCM tool via settings changes, etc., and collaborate with others on ways to use the tool better.
Infrastructure as code (IaC) and CI/CD are two key components of a DevOps practice and crucial to understand. A key principle of DevOps is to apply software development practices to servers and infrastructure. IaC is the method of handling infrastructure just like code, and it means that we can test, rollback, version, and automate the provisioning of environments. It is interdependent upon version control, automated testing, release or version tagging, and release promotion. The maintenance and configuration of this infrastructure, and skills and tools that support that, are important as well.
Continuous Integration (CI) is the practice of compiling, building, and packaging your software on a continuous basis. With every check-in, the compilation process is triggered, unit tests executed, automated static analysis tools and quality checks performed, and, ideally, automated deployment into one environment happens. It usually means that you have all code merged into the mainline or trunk before triggering this process off. Keep in mind, the goal for CI is to allow teams to spend less time debugging and more time developing new features. Moreover, CI pushes developers to create modular and less complex code. Smaller chunks to test means faster builds and easier to find bugs!
Continuous Delivery and Continuous Deployment (both are referred to by ‘CD’) are not the same thing, but close: basically they refer to the delivery pipeline from the CI stage through to Production deployment. The big difference here is that Continuous Delivery is some mixture of automated and manual stages, with the Production deployment step always being done manually. Continuous Deployment, on the other hand, has all the stages automated.
Monitoring this code and infrastructure you have worked so hard (and fast!) to build is also important. Agile approach and speed in delivery mean increased awareness during each stage of the delivery pipeline, to ensure value; measure changes during DevOps practices; and the increased load on the customer feedback loop and deployment.
Lastly — containers. Docker is the container tool of choice and very prominent today in the DevOps ecosystem, and one would be wise to learn it. It’s an open-source platform used to create lightweight, portable, self-sufficient containers. These containers provide flexible and predictable environments, ideal for throw-away developer sandboxes. As helpful as Docker can be, however, I would stress the importance of understanding the other components within DevOps first, and then interject Docker. It can make things easier in some ways, but it is not a cure-all, and it can add complexities. It’s best value-add is in the area of improving velocity and stability to your delivery pipeline. This makes it even more important to define that pipeline and understand the tools used, and then start small with Docker and see what works. As you scale, get feedback from your continuous delivery cycles, and various steps, and incorporate the feedback to build your delivery pipeline and DevOps culture (collaborate!).
There are many tools to be familiar with in order to achieve DevOps success — too many to list here. But for starters, as you try to build momentum in your path to a DevOps career, here are some:
- CI: Jenkins, TeamCity, Bamboo
- Configuration Management: Chef, Puppet
- Monitoring: Nagios, Monit, ELK
- Image Creation/Automation: Packer, Vagrant
- Containers: Docker, Kubernetes, Apache Mesos
DevOps Collaboration and Soft Skills
Strong communication skills are a must for anyone interested in a career in DevOps. You need to be able to understand what is happening across your project or organization to plan appropriately, stay nimble and be ready to pivot on a dime. Learn how to communicate your team’s progress or plan, so that any impediments are found quickly and removed. This approach will improve the feedback loop. Similarly, collaboration is a key cultural aspect of DevOps, bringing together Development and Operations teams. Real-time feedback and communication allow teams to make rapid changes to an application while keeping a stable and robust environment.
DevOps is all about working as a cohesive, seamless team, in order to reduce operational delays and overhead, and remove communication gaps.
3 steps to keep in mind to improve collaboration:
- Define a common goal and set of priorities.
- Develop a one-team approach and atmosphere of trust and respect.
- Create a clear roadmap with roles, responsibilities and checkpoints.
Check your ego at the door because DevOps isn’t about titles or experiences — it’s about working together to create something awesome. When working with a large group, utilizing a collaboration tool is key — consider using Slack, HipChat or Teams. Since Agile and DevOps seem to go hand-in-hand (some consider them the same thing — that’s for a different post!), JIRA and KANBAN boards are also tools worth learning and mastering.
If your communication skills need some work, consider your next interaction. Many times, it just feels like we are waiting for the person to finish speaking before we can add our own thought. Take the time to ask questions and actually listen rather than preparing your next line. An important and ignored part of communication is listening, and this can be practiced and improved.
If your meetings always seem to run over and end in off-topic ramblings, it will help to write-up and send an agenda in advance of a meeting. Even if the topic seems pre-decided, bring the agenda and stick to it. Send the meeting minutes out after the meeting and be sure to list those invited, list all attendees, and then send the minutes via email to all invitees. It’s amazing what something as simple as getting things down on paper can do for a meeting. There are groups that can help you develop your communication skills — both public speaking skills and listening and interpersonal skills, which can encourage you to be more concise, specific, and clearer when communicating.
DevOps requires one to be technically proficient but also requires collaboration and excellent communication skills. Remember the goal of DevOps — to improve delivery. All things must work together in a DevOps ecosystem to increase speed and quality of the software (or infra, in a non-software delivery situation) as well as process and planning and improved team effectiveness. Keep that in mind when you choose tools to learn and skills to develop and improve — they all serve the DevOps purpose.
In our next blog, we’ll discuss how to bring your project or team towards DevOps. We’ll discuss ways to add, apply, or improve specific DevOps capabilities, toolkits, and efficiencies, as well as identify opportunities for DevOps advances.