By Areti Panou
About 5years ago I was working in a small product that was doing (almost) everythingthe DevOps way. We had the works: code and tests versioned in git, trunk baseddevelopment, building the code once (more or less), feature toggles, dailydeployments, the ability to fix issues fast, monitoring and alerting of ourproduction system.
But therewas one tiny problem.
We stillneeded to adhere to the company’s Quality Management System (QMS) whichincluded compliance to ISO 9001 certification as well as other regulatoryrequirements. While development was adapting to the new world in a fast pace,the same could not be said for the company’s processes at that time.
So hereare some things we did to address the situation.
Identify the “must haves”
Yes, the QMS consisted of a huge list of requirements but our common sense told us that they didn’t all have the same weight and importance. Minor performance issues didn’t seem as serious as upholding security and licensing requirements that could prompt legal ramifications. With the help of our company’s QMS owners, we understood the severity of each requirement and created 2 lists: One with all the requirements that had to be fulfilled with every deployment and one with the ones that had to be fulfilled for the release of new functionality. For example we were scanning for any OWASP Top Ten vulnerabilities before each deployment but running and documenting performance tests on a new feature only before its release to customers. Respecting the requirements on these 2 lists meant that our product and the company were safe from any wrongdoing.
Customise to your product’s needs
Once weknew what was important for the company, we needed to implement therequirements’ checks in a manner, that they indeed improved the quality of ourproduct. Instead of blindly using a recommended tool, we checked if there werealso other options that would better support our technology stack. We even cameup with our own tools , as wedid for example for complying with the traceability requirements. When weneeded to only take care of priority 1 issues for breaking a certainrequirement, sometimes we would decide to not allow priority 2 issues getthrough either. We evaluated which of the non-essential requirements would be beneficialfor us and added their checking to our to-do list as well. Our goal was to takecare of the regulations, not because the company imposed it on us, but insteadbecause we saw true value in them.
Add requirements’ checks in the pipeline
What naturallycame next, was to automate as many of the requirements’ checks as possible andinclude them in our deployment pipeline. The priority was to have the onesnecessary for deployment running right away once something was pushed by thedevelopers to the main trunk, while requirements’ checks needed for releasing newfunctionality run daily. Our aim was to get feedback on the status of corporaterequirements fast, since any violation could either block us from deliveringsoftware or take a great amount of time to resolve as QMS representativesneeded to get involved. Feeling confident about compliance gave us more time tofocus on additional activities that would further improve the quality of ourproduct.
Share with the company
The lastaction we took was to keep an open channel of communication with the QMSowners. We showed them our implementation of requirements’ checks and got theirfeedback whether they were enough to ensure compliance. We adopted theirsuggestions and equally they understood and took note of what our pain pointswere. What I found to be the most surprising thing, is that they were respondingpretty positively to our proposals and they were eager to learn more about howthings could be even better. Because the truth of the matter was that for along time the QMS has been used as the bogeyman to do things right, so nobodywas eager to talk to its owners, out of fear they were doing something wrong.
Of coursenot everything was ideal and sometimes we needed to debate about significantpoints, for example regarding the separation of responsibilities. How candevelopers test their own code? But once we discussed about code reviews orpair programming and the multiple layers of testing taking place before anycode ended up in production, their concerns were at least alleviated.
In the spring of 2018 some of theleading figures in the DevOps community wrote a love letter to auditors, titled “Dear Auditor” , anattempt to apologise for leaving them behind and not adequately explaining howa product can be compliant in this fast-paced world. The letter includes a where audit concerns are listed along with methods to address them.
Looking back now I realise that we treated compliance requirements like any other Agile project: identified the essentials, refined them, implemented them and asked for feedback from our stakeholders, the QMS owners. And from their side they saw the need to adapt to the times and facilitate us by revisiting policies and processes. In the end, the biggest lesson we learned was that only through an honest conversation between development and internal auditors were we able to accomplish what we both wanted: deliver quality software to our customers fast.
About Areti:
Amathematician by vocation, a software tester by profession, Areti Panou is nowworking as a cloud quality coach. Her job is to help development teams withinSAP come up with test and quality strategies that best fit their needs.Before that, she was the sole tester in one of the first products at SAP, toput a full Continuous Delivery approach into action and the first one in SAPhistory to daily deliver to its customers.
She blogs about questions that occupy her mindregarding software development, testing, and quality and shares random thoughtson Twitter as .