DevOps in itself only refers to a set of principles of practices and principles that focuses on integrating development and operations to deliver features, updates and fixes faster with the goal of improving software releases. It’s not extensively defined giving it the flexibility to be applied in any given methodology. Because while these focus on closing the communication gap between what the clients need and the developers have to develop, DevOps closes the communication gap between developers and infrastructure, it is complementary.
DevOps is supported by using different sets of tools or “toolchains” that can help with any other agile methodology to give some examples.
For development, what is common is using git for code development, source code management and code merging, but what if you could automate the setting up of the development environment so it can be quickly configured whenever a change in hardware takes place, or when you need to change a dependency for your project and you want to ensure that everyone is working under the same conditions, this also helps you avoid the “it works fine on my machine” situation.
For testing, tools like jenkins or buildbot which are aimed to continuous integration, continuous testing and application pre-deployment staging, you can automate all of this so the results come faster and you can work them out as soon as possible, also helps minimizing the damage that integration hell can create, by having it automated you can easily identify a failure state and by having involved developers on it you can find quickly where the failure resides, and if everything goes well see how it behaves in a pre-deployment environment before going into full production.
For production, tools like ansible, terraform, chef and puppet can help with release automation, infrastructure configuration and management, once everything is in order your system can go live into production and yes automated is a major benefit in this stage, deployment can be a stressful activity because the impact can be so costly system wide. you can minimize this by making smaller releases, and avoid bringing everything to a halt when it happens, making it a regular activity helps and automating to making it more doable is the way to go, it pays off the investment in the long run.
All of these can be integrated into already existing methodologies and processes, that's the beauty of it, making you have a more robust development cycle that improves efficiency and delivers faster.
I’ll give simple examples how some agile methodologies benefit from having it as a complementary force.
Scrum is based on an iterative incremental approach where the work is defined in a sprint that lasts from one to two weeks, in the sprint is defined the work to be done during the sprint duration, having at the end as a result a working product, is lightweight and designed around teams working together to reach a common goal.
The benefit of integrating DevOps in scrum is allowing you to meet deadlines with more accuracy by having the deployment integrated in the time it takes to complete a task, so when a feature is developed and tested it can be immediately available in a production environment.
Let's start by denoting the lean principles: Eliminate waste, Amplify learning, Decide as late as possible, Deliver as fast as possible, Empower the team, Build integrity in, See the whole.
Devops can help us with eliminating waste which can happen by switching teams from development to operations when a failure happens, also when it delivers as fast as possible to fulfill the client needs and not what they required yesterday
Kanban boards are used to visualize and manage work, it shows the capacity of the resources available and the work that needs to be done, in terms of software development it usually shows features to developed based on user stories, usually an item is considered done when developers finish the code and testing. The deployment is handed off to operations, there is still work to be done that isn’t visualized, with DevOps you add a sense of completeness for the item due to it being marked done when is literally shipped and in production.
Test Driven Development
In this methodology requirements are turned into test cases and the software is developed to pass the test, the order is as follows: add a test, run all tests and see what fails, write code to meet test case,run test again, when it passes refactor code to standard.
In this scenario we can add a staging environment that replicates the production environment, we can run the tests after deployment in an automated fashion and find “hidden” failure states that were not visible if we ran just the code, we add repeatability when we automate deployment.
These are just some quick simplified examples of areas that can be improved in other agile methodologies, and we can use DevOps as a complementary force to achieve what teams working together with the right tools can achieve.