DevOps is another buzzword that has made waves in the IT industry in the last few years. Earlier, we used to have System Administrators, and traditionally, they only used to configure, monitor and maintain the systems. These would include the critical systems, including the servers, and system and one of the key SLAs for System administrator performance would be system downtime and overall performance levels. This role was mostly removed from the development process, and clarity was there on their responsibilities.
However, when the nature of software development evolved from the traditional waterfall to the current Agile models, all roles associated with it had to evolve. Thus happened DevOps, which in a way, is a complex role, with overlapping responsibilities. This is a combination of development and operations and this is a culture and not a technology. Due to the nature of the Agile development, the DevOps role and responsibilities are intertwined closely with that each phase of the Agile development model. So, there are no clear lines drawn as in the earlier case of System Admin roles.
A DevOps person has to be active from the design phase of the software project. The responsibilities include the creation of a development pipeline, Quality Assurance, as well as traditional System Admin activities. There are overlapping activities for the whole team. This improves coordination within the team to ensure aggressively, Agile delivery timelines are met. There is seamless coordination among the team members, and possibly, a developer may have to perform a production activity and so on. In smaller organizations, there may not be a separate DevOps person or role, and it may well be the developer/tester/System Administrator who does the same.
So, in a way, while the traditional System Administrator role would be limited to systems and their configurations, a DevOps role would be also involved in the deployment of the software and the operations therein. Unlike clearly defined expectations of a System Administrator role, here the challenges are more and complex. The opportunities to learn and grow and are also equally in abundance.
Many developers move into this role when they get into deployment and operations. So do System Administrators who can code, and also understand the various development phases and nuances. System Administrators may not necessarily have a holistic view of the technical environments they work in, as DevOps engineers do. For DevOps personnel, it is a must, and they always have to stay up-to-date with the challenges thrown in, by upgrading their competencies to meet the same.
The DevOps Role
As mentioned above, a DevOps role would need to have a good hold of the complete picture of a software project. Hence, they need to know what happens during the design phase, and what is planned in the pipeline at every scheduled sprint and so on. They may have to don multiple hats by collaborating with developers and other IT operations staff, to ensure efficient implementation of application development and delivery processes. This would mean a thorough understanding of software development and all associated processes. The other expected competencies could be knowledge of version control tools, application build, test and deployment processes including automation, server configuration, and monitoring, etc.
DevOps personnel will be involved in Continuous:
- Code Inspection
Hence, it is a given that they would be highly technical and aware of the emerging industry trends as these activities rely heavily on tools. An ability to quickly understand, analyze and manage the operational challenges arising across the multiple phases of software development and deployment, is a great asset. The mindset and approach of a DevOps person would be at a much higher level than that of a traditional System Administrator. Their roles are more complex, challenging, constantly evolving, and highly critical in software teams.
Considering that the role is a holistic one, it is obvious that they DevOps people would need to possess a set of skills, apart from being able to pick up new ones on the go. Typically the skills that are required for a DevOps role are:
- System/Application/Resource/Database Administration
- Configuration Management
- A good understanding of software development processes
- Continuous Integration/Continuous Deployment (CI/CD)
- Cloud Computing
The first three in this list are skills, which competent System Administrators would have, depending on the nature of the assignments they have handled. The last three are the typical new age DevOps related skills which they have to pick up if they want to make the transition to a DevOps role. There is a slight chance that certain System Administrators may not have done any scripting at all. In such a scenario, scripting and automation may also have to be picked up.
Also, picking up on configuration management tools like Puppet, Ansible, Chef will help as they help in configuring and automating processes and applications at a high scale. At times, DevOps people may also have to learn to integrate build management tools like Gradle and Maven, into the CI platforms, for better agility. Version control is a must and this is where GitHub can help.
Why New Skills?
Since DevOps is not an isolated role and is deeply integrated into the software development and deployment process, a good understanding of the same is imperative. This helps them get involved, analyze and contribute productively at all stages including the deployment stage.
The CI/CD pipeline is a very important aspect of a DevOps role and hence this is a new skill that will have to be necessarily picked up. In the earlier waterfall model, the software used to get deployed only after it is full and final. Today, though, the Agile model works differently; developers can continuously update the software changes into a centralized repository. Automated builds and tests are enabled in this repository, making it possible for the deployment of the various versions of the software.
Many tools allow this continuous integration and deployment, and a few of the CI tools that are popular are Jenkins, Buddy, Bamboo, TeamCity, Travis CI, GitLab CI, Codeship, etc. These tools are designed to help minimize the application downtime during the continuous integration and deployment of the application.
There are continuous monitoring tools as well that can help with tracking the performance of the various aspects of the ecosystem, with logs, alerts, and notifications. Lansweeper, CloudWatch, Stackdriver, Snort, SolarWinds, AppDynamics, New Relic, BigPanda, PagerDutyand Nagios are a few examples.
Most organizations have already moved to the Cloud or are considering the same. Cloud ensures high availability and convenient access from anywhere in the world, at all times. So, with more and more apps being deployed to the Cloud, a good understanding of Cloud Computing also is a must for a DevOps person. Also, they would need to configure servers and services on these Cloud hosts. So understanding and being able to efficiently implement Software as a Service (SAAS), Platform as a Service (PAAS), and Infrastructure as a Service (IAAS) is a key competency. This may involve learning how applications are containerized, deployed and supported on Cloud infrastructure.
Cloud Computing in combination with the DevOps culture, provides enterprises with an unbeatable advantage in terms of agility, scaling, and consistency in code quality and application performance. The various Cloud models of Public, Private and Hybrid, make available immense cost-effective resources to organizations, making the cultural change to DevOps possible. Cloud resources also enable better collaboration and communication among the various team members, making it possible for them to work seamlessly across global teams. A whole lot of the aspects needed for CI/CD, like high availability, security, fault tolerance, on-demand infrastructure, measurement and monitoring, resource management and configuration, provisioning, and Data Governance is built into most Cloud Solutions.
So, the combination of Cloud Computing and DevOps becomes a rather potent one; one that has the power to enable organizations to emerge victorious in their quest to beat the competition, in the time to market as well as ensuring quality products. The improvement in productivity is just another bonus gained in the bargain.