What is DevOps
DevOps is an approach for making quality software.
Developing and delivering software to customers is a multi-stage process. In the DevOps approach this process is pictured as a cycle - better known as the DevOps lifecycle.
DevOps emphasizes collaboration among everyone involved in the DevOps lifecycle. It includes not only developers but also the operations teams, product team, QA, security team, etc.
A software team following this DevOps lifecycle adopts a set of practices and uses tools to support these practices.
DevOps practices
There is no unified formula for DevOps and the DevOps practices vary across organizations.
These are key practices that would apply to every software team.
-
Ship software in small incremental steps. DevOps approach favors shipping software in small steps rather than in big leaps. It helps the technical teams to easily locate and rectify. Also, shipping in small steps helps the product teams to get customer feedback early on and develop the product along the lines of customer requirements.
-
Automate everything. To deliver software in small steps, you need to push updates to the production multiple times each day, or better yet each hour. You can’t do it manually. You must automate every possible thing.
-
Monitor application performance. Every update you push into the prod, may not work as expected. Things do go wrong sometimes. To identify what exactly is wrong you need to monitor metrics and logs in the running applications.
-
Get everyone involved. Matters like software security and operations are not afterthoughts in DevOps. The teams corresponding to all aspects get involved from early on.
-
Collaborate often and collaborate more. Collaborating helps the team members understand everyone and reduces gaps between the teams. It also helps every one to get aligned to the main goal.
-
Keep improving continuousely. Adopting DevOps practices is not a do-it-once project. The software team must critically evaluate and improve, identifying and correcting the inefficiencies.
DevOps tools
DevOps practices require numerous tools at each stage of the DevOps life cycle.
-
Plan - Project management and CRM tools
-
Code - IDEs, code editors, and linters
-
Build - Version control, image build tools, and repositories (Ex: Docker, Harbor)
-
Test - Language or framework-specific test tools
-
Deploy - Continuous deployment tools (Ex: ArgoCD, Flux, Flagger, and Tekton)
-
Operate - Application Performance Monitoring (APM) tools, visualization tools (Ex: Prometheus, Fluentd, Kibana, Grafana)
-
Feedback - Bug tracking tools
The tools in the plan, code, operate, and feedback stages have been in use from the pre-DevOps era as well. The build, test, and deploy tools became dominant with the growth of DevOps. Together the tools in these three stages form the CICD pipeline.
DevOps and microservices architecture
Microservices architecture is a concept that emerged in parallel with DevOps. Most of the DevOps practices rely on the microservices architecture and the microservices architecture relies on DevOps tools.
Today, DevOps and microservices are considered inseparable.
What is a DevOps engineer
DevOps is not a role. But you find many companies advertising for DevOps engineer positions.
A DevOps engineer is a person working to establish DevOps practices in an organization and is also responsible for operating the DevOps toolset.
The job scope of a DevOps engineer is highly dependent on the organization and its maturity level of DevOps adoption.
What is platform engineering
Platform engineering is the next level of DevOps. DevOps focuses on implementing the best practices and using the correct toolset. Platform engineering creates an abstraction layer on top of the DevOps toolset to hide the underlying complexities.
Platform engineering strives to reduce the cognitive load of the developers and let them focus more on the code than on the DevOps tools.
DevOps roles are in high demand. You can switch to a DevOps career by building the right skill set.