DevOps has many definitions and nobody seems to agree on a single term.
It gets more confusing when looking for DevOps Engineers job descriptions, you don’t know if they are looking for a System Administrator or a Full-Stack Engineer.
Developers like to build software and test things quickly, whereas System Administrators focus on stability and reliability. In my experience merging both roles in a single one is what a DevOps Engineer is.
DevOps is not only about the tools
A misconception about DevOps is the belief that by using tools like Jenkins, Terraform or Ansible the team is applying a DevOps practice. The tools are just a part of the general objective of a DevOps role but there is also the human factor that includes people, business objectives and processes.
From a post in the devops subreddit:
Any fool can pick a tool. The wise man takes the time to understand the goals and constraints of the issue.
Agile and DevOps
The Agile methodology brings together a collaboration between business users and developers meanwhile DevOps focuses on the collaboration between developers and system operators. System operators include database administrators, network engineers, infrastructure architects, and security teams. Agile software development provides business agility, DevOps provides IT agility.
A DevOps engineer is expected to acomplish a reliable transition fron a development environment to a production environment, building all the processes in between. A DevOps practice must include the following priciples:
This a core DevOps philosophy that focuses on automate the setup, configuration, and deployment of the infrastructure. By removing the manual process we can rapidly create new environments for developers and improve their productivity.
- Infrastructure as a code
Treat infrastructure the same way developers treat code. Developers use source control to log a history of the code changes and bug fixes. Practicing Infrastructure as code means tracking every change in the infrastructure in a source control tool like git.
- Continuous deployment
Automate the deployment of the application from development to production. Sofware must be deployed repeatedly and reliably. If a deployment fails it has to roll back to a previous stable version.
- Monitoring and Logging
Feedback from users is critical in modern organizations. By capturing and then analyzing data and logs teams have a good overview of how changes are impacting users. Also, monitoring is increasingly important as applications must be available 24⁄7, creating alerts and real-time analysis helps developers to monitor their changes.
Security is predominant in any Organization and a good DevOps practice must focus on security in every stage of the project.