What is DevOps
What is DevOps? Different organizations give different answers, and there is no single universally agreed-upon definition. To summarize:
DevOps is a combination of cultural philosophies, practices, and tools. Its goals are:
- To enable organizations to deliver software at high speed and with high reliability.
- To improve communication and collaboration within the organization. Agile software development practices broke down the “wall” between BAs (business analysts), QA (testers), and Devs (developers), enabling shared understanding of requirements. DevOps goes further by breaking down the “wall” between Dev (development) and Ops (operations), creating a continuous flow from software development through deployment to maintenance.
Cultural Philosophy
The core purpose of the DevOps culture is to break down the “wall” between teams (Dev and Ops), and to improve transparency, communication, and collaboration across teams. The core principles of DevOps can be understood as the following four points:
- Shared responsibilities
- Feedback
- Automation
- Build quality in
Shared Responsibilities
In a narrow sense, Dev and Ops should share accountability for the success or failure of a product. Under agile software development practices, all roles on the team — including but not limited to BA, Dev, QA, and Ops — share responsibility for the product’s outcome. Throughout the entire product lifecycle, the team should jointly own the responsibility of maintaining the system to ensure faster and more reliable product delivery.
Feedback
Feedback is critically important in DevOps. Through feedback, we can continuously improve both the collaborative workflows between different team roles and the system itself.
Feedback includes not only communication between team members, but also feedback from the system to the team. For example:
- Pipeline status should be communicated to the team in a timely manner to drive the next steps.
- Production incidents detected by monitoring should be promptly fed back to the team. When the API Gateway encounters a large number of 5xx errors in a short period, we should respond quickly to improve user satisfaction.
- System optimization based on various metrics collected from production monitoring.
In practicing DevOps, we should keep the core principle of feedback in mind at all times. While strengthening feedback loops, we should also avoid going overboard — team members should not be overwhelmed by too many tools and notifications.
Automation
Automation is the foundation of the entire DevOps approach and promotes team collaboration. Automated testing, automated deployment, and similar practices allow each team member to focus on the business itself while reducing the chance of human error. Automation enables teams to build, test, and release products faster and more reliably.
In practicing DevOps, we should minimize manual operations as much as possible. Achieving automation requires collaboration and communication among different roles. It is recommended to maintain a unified set of automation scripts to strengthen collaboration across roles and establish a shared context.
Build Quality In
During the development process, all roles involved across the software lifecycle are expected to take real-time responsibility for software quality. This ensures that software meets a baseline quality standard before it is handed off to the next stage, reducing rework caused by quality issues and avoiding significant waste of human effort.
To deliver applications and services faster and more reliably, controlling quality at the source is essential.
Practices
Common DevOps practices include:
- CI/CD: Continuous Integration, Continuous Delivery, or Continuous Deployment. CI/CD is the foundation of DevOps as a whole, and the pipeline is the concrete manifestation of CI/CD.
- Continuous Testing
- Continuous Monitoring
- Infrastructure as Code (IaC)
The specifics of each DevOps practice will not be covered in depth here — separate articles will be dedicated to each one.
Common Tools
Collaboration tools: Jira, Mural, Slack, Microsoft Teams, etc.
Version control tools: GitHub, GitLab, Bitbucket, etc.
Continuous integration tools: Jenkins, TeamCity, Travis CI, etc.
Deployment tools: Terraform, AWS CloudFormation, Ansible, Helm, etc.
Monitoring tools: Zabbix, AWS CloudWatch, etc.
The DevOps toolchain is vast — the above is only a small subset.