I started working as a DevOps engineer couple of years back. My initial impression was that it optimized release management activities, which was not completely true. When I dived into it, I found that this was just a tip of the iceberg. The role of a DevOps engineer is not just limited to CI/CD and automating releases. It's much more than that. Long story short — automate everything.
The below diagram depicts that DevOps is the collaboration between development, QA, and operations teams.
What Is DevOps?
DevOps is a term emerged from the combination of Development and Operations. The role of a DevOps engineer is to automate all the operational work in the way that a developer would do. The idea is to encourage frequent releases to increase quality and get early feedback.
Hence, according to me, the main two objectives of DevOps are increasing the speed and quality the deliveries.
Where Did DevOps Come From?
"DevOps is the offspring of Agile software development.” — Dennis Ehle.
Nowadays, Agile is an overloaded buzzword. Everybody has gone or is going Agile. Not only development but also other departments such as BA, QA, build-and-release engineers, etc. should keep up to speed. A DevOps engineer helps all of these stakeholders adopt Agile gracefully. They automate everything right from the planning phase to the release phase. They help the team move faster while maintaining high quality.
What Problem Does DevOps Solve?
“Ideas are cheap. Ideas are easy. Ideas are common. Everybody has ideas. Ideas are highly, highly overvalued. Execution is all that matters.” — Casey Neistat.
Agile software development is one of the revolutionary changes that have happened to software development practices in recent decades. It advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible responses to change. To make this happen, the entire development life cycle should be optimized. As for optimization, wherever it's possible, automation the key — that should be a no-brainer!
What Should Be Automated?
Each and every phase of software development should be automated!
Some people may argue that automating everything is very ambitious or even impossible. However, I think that we should consider that stage as our final stage and work towards it. After all, we are implementing Agile, which is a continuous improvement process.
The main idea behind Agile is rapid and frequent delivery. Whatever is repetitive should be automated, or try to reduce the time spent on it. This should be applicable everywhere in the project.
I have defined some categories for each phase of the SDLC involving DevOps tools. We should try to adopt at least one tool for each category to address the solution.
Planning and Analysis
- Capturing and tracking (JIRA, ServiceNow).
- Documentation or Wiki page (Confluence).
- Collaboration (Slack, HipChat).
Design and Implementation
Build and Release (CI/CD)
- Repository management (Artifactory, Nexus).
- Build tools (Jenkins, Bamboo).
- Configuration management (Chef, Puppet, Ansible).
- Cloud (AWS, Azure, OpenStack).
- Containers (Docker).
Integration and Testing
- Source code verification (SonarQube).
- Security testing (HP Fortify).
- Functional testing (JUnit, Cucumber, Selenium).
- Performance testing (SOASTA).
Although the terminology is somewhat new, the core concept of DevOps has always been there. Still, it brings a lot to the table. Hence, everybody has started to adopt DevOps. The implementation may differ from organization to organization, as it is highly dependent on management's priorities. It surely helps move things more quickly and maintain high quality.