DevOps is more of a thought process or culture in software development than a process, tool, or technology. In simple terms, it is the process of identifying and automating anything that doesn't need critical thinking for developing software. I would like to share my thought on how any team can approach implementing DevOps in their company or project and how simple it is.
Can I say I have implemented DevOps if I am using Docker to deploy my artifacts?No! It is like saying I am agile because everyday morning we do stand-up. Using a particular tool or technology won't make your team a DevOps team. Also, it's not just about releasing software into production in short intervals. It's about releasing a stable, bug-less, and maintainable software to production. There's no compromise to quality because of automation or even anything else. We are talking a lot about it now as lots of new automation technologies and tools have been created or evolved—or, should I say that because people started talking about it, companies started to innovate in the automation field.
The first important step to implement DevOps is to identify tasks to automate or in words of "Lean Development"—identify and eliminate waste. In the context of DevOps, "waste" refers a redundant task. For this, talk to different team members in the team. Ask for the tasks that they do at regular intervals of time. If someone is doing something more than twice in a certain period, it's a candidate to be automated.
Once tasks are identified, group and categorize them. This will help in the next steps when we're looking for tools and technologies to help with automation. The grouping stage could be based on the teams executing them, systems involved, or particular phase of the software development cycle. For example, tasks like quick code reviews, smoke testing applications, merging with main branches, etc. can be grouped into the CI/Build.
Now that we have expressed our groups of tasks to be automated, we just need to pick the right tools for each group. But make sure to have all the tools technologies picked for each task work with each other. Take other tools integration into consideration while picking up tool for any group.
Some tools/technologies that DevOps teams can use are explained nicely here. But remember, tools and technologies enable you to automate tasks, but it's the thinking and culture which the team needs to work out in order to use them effectively.
None of the above is anything new. It's the same old "good practices" which we we've been told all along. A DevOps professional/team is someone who has an eye to find things that can be automated and find the right automation tool based on his/her ecosystem. DevOps is neither a role or a specialization, I feel everyone on the team needs to have this thinking—just like Agile.