DevOps is basically facilitating closer collaboration between development and the operations side of the software creation process. This handshake between developers and operations personnel works in favor of bridging the gap from software creation to software delivery.
With DevOps becoming more and more popular in the software industry lately, there is a debate over whether DevOps is here to replace the agile movement. As an industry practitioner who has worked in agile for almost a decade now, I have always seen DevOps as a friend and an extension of agile.
Here, I would like to highlight five ways that DevOps actually compliments agile.
Get TestRail FREE for 30 days!
A Focus on Users’ Needs
The reason agile became such a movement was the focus it brought to customers’ real needs. Agile uses more communication and collaboration with the customers and their representatives to capture the real market needs, as well as frequent feedback to get the product right.
DevOps extends the same premise with a focus on delivery and deployment. What cooks within the development environments may not work the same in a production environment, which is the reason for many of our release-time issues. By employing continuous integration in a build and testing framework, we can use more production-like environments for deploying and verifying the functionality of the software, leading to fewer last-minute glitches. We also get more insight into how the software will work in real-time environments.
Agile started the iterative and repetitive delivery cycle so that we can deliver working software regularly. But that advantage is lost if we keep developing in iterations but are unable to push the developed chunks out to production in a timely manner. The frequency of outbound releases turns out to be less often than we would like because we are always waiting for integrations, enough tests or more confidence in the system as a whole.
DevOps uses the concept of continuous delivery and takes us to that end goal. A basic DevOps pipeline helps us set up enough checks, tests, automated integrations and builds, integrating with a deployment tool so that we deploy as well as test on production-like environments each time we build. We can even set up some feedback loops for monitoring activity. This lets us get much more done, and at the end of every build, we can be confident and ready to deliver.
Concentrated Value Creation
Think about what the task of generating a build for your software includes: getting a set of libraries, ensuring all the correct versions of a set of dependencies are placed in the folder, checking the unit tests and having them run successfully first, compiling and running the build, and, finally, keeping the package in a certain place with a specified naming convention. Now imagine doing this multiple times a day.
Now think about this scenario from the viewpoint of a tester, who now has the task of picking up the package and deploying it on test servers. For that deployment, they have to stop the test server, ensure the previous deployment is cleaned up, take down the database servers and clean out the old test users, deploy the new package, check that the new dependencies and libraries with correct versions are added, start the database and test servers, and set up a test user in the database.
Imagine doing this for at least three test environments every time there’s a test build.
And these are only the fairly basic steps that could be part of the build and deployment of software; many of you would actually have more to do.
Practicing agile development does not make this process any easier, because you could be looking at multiple builds to create and test every day. Having manual steps to perform makes us prone to mistakes and deters us from having frequent builds. But then we also lose out on agility.
This is where DevOps comes to the rescue. DevOps enables us to automate all the manual and repetitive tasks related to configuration, integration, build, test and deployment. We could have been using tools for these aspects individually, but having all of them integrated and set up as an end-to-end pipeline takes all the worry away, leaving us to concentrate on things that matter—like creating more value for the users. Which takes us to the next point …
Agile talks about people being the core of any project, and having motivated and self-organizing teams that require minimal management is the key to success. But the self-organizing structure can be successful only when we have a few basic steps out of the way, and those can be automated using DevOps.
Let’s say you have a team of developers all working on a couple of stories for the next week. You want to ensure that they write unit tests for their stories, but you do not want to breathe down their necks for the entire week asking about it. So you made it a part of the exit criteria, having them add a task for unit testing for every user story they address. But the quality of what they write in their unit tests could also be a concern, so you ask them to give you the number of tests written at the end. Ultimately, the count of tests may not really be a good measure for test quality.
Trust is important, and so is the freedom for people to select their approach to work. We could just put a basic static code analysis tool, such as Cobertura, which would always run when we generate a build and show a report of percentage of code coverage for the unit tests. Developers are free to decide how many tests they do or when to write the tests, only ensuring that the Cobertura report always shows a minimum of 80 percent coverage before sending the build out for testing.
DevOps helps set up such a process, which frees up time and helps these valuable, skilled individuals spend their energies in doing things that are more valuable.
A Culture of Inclusion
Agile brought a focus on early testing and inclusion of all aspects of software creation in a single team. It also emphasizes the “Three Amigos” dynamic—or the business analyst or product owner, the developer and the tester—and how these roles need to work together on every feature to bring the best quality outcome and avoid any communication barriers.
DevOps essentially extends the same idea to the operations team. DevOps talks about setting up a culture of inclusion by making the operations and IT personnel part of the software team, so they can highlight the needs from an operations standpoint right at the beginning. In a way, it becomes the Four Amigos: the BA, the developer, the tester and the operations guy working on every user story or feature in every iteration, discussing the needs from a system point of view, the resources needed, environments to be set up, the list of dependencies to be maintained, and so on. The idea is to have a view from all aspects of the software lifecycle, not leaving operations behind.
I see DevOps as friend: an extension of the agile mindset and a tool that could help pave the way toward better agility. How do you see DevOps?
Nishi is a consulting Testing and Agile trainer with hands-on experience in all stages of software testing life cycle since 2008. She works with Agile Testing Alliance(ATA) to conduct various courses, trainings and organising testing community events and meetups, and also has been a speaker at numerous testing events and conferences. Check out her blog where she writes about the latest topics in Agile and Testing domains.
Test Automation – Anywhere, Anytime