For a while, I have been thinking about the responsibilities of QA Engineers by broadening them to the production environment. In this post, I want to write the reasoning behind the needs of QA Engineers in production.
Integration Testing: Tools and Technology
Every day we are facing new integration points with third-party tools or technologies for a win-win strategy. Most of the time these technologies are in the term of the trial period or just a cheap alternative to the present one. These technologies or tools simply don't have adequate documentation so it makes the development and testing of integration riskier. This means that the development, test, uat or preprod test environment is not enough for catching all possible bugs, as a result, the production environment is the final destination for checking logs and monitoring the integration results.
Validation of Non-Functional Requirements
There are also unclear points behind the non-functional requirements like performance and usability. The real performance of the applications can be seen in real user environments. This doesn't mean that performance testing should be done in production. This means that with the performance of the application, the real users behave as expected or they just leave the application just before the message which was integrated with the last build appears. Another meaning of this just needs to check the performance requirement is statistically valid in terms of customer satisfaction. The usability part, even we had done usability testing with the real users before the new feature request in the usability lab, it is no guarantee that the result will be repeated by the real user in their environments. This time we need to check the usability requirement with the real user.
The Nature of the Development Process
The development process can also impose QA Engineers to monitor the production environment. If you adopt CI or CD the process is more like to monitor in production because production should be updated regularly which means you have a more risky situation. Translation from traditional QA to agile adopted QA requires more collaboration with other teams; furthermore, translation from manual deployment to CD requires a better monitoring system for the development process. Checking the monitoring system is a task of QAs because it gives the overall quality of the process, which test results can be as good as the development process. About the subject ThoughtWorks has taken it to radar and name it as a technology with "QA in Production" and to recommend it as "Trial" which means that enterprise should use it for the project which risk can be handed. It give the following explanation:
Traditionally, QA roles have focused on assessing the quality of a software product in a pre-production environment. With the rise of Continuous Delivery, the QA role is shifting to include analyzing software product quality in production. This involves monitoring the production systems, coming up with alert conditions to detect urgent errors, determining ongoing quality issues, and figuring out what measurements you can use in the production environment to make this work. While there is a danger that some organizations will go too far and neglect pre-production QA, our experience shows that QA in production is a valuable tool for organizations that have already progressed to a reasonable degree of Continuous Delivery.
Understandable Monitoring Tools
In the market, there are very successful monitoring tools in which everyone in the organization can understand what going on in the production. Most of them give real-time and plotting graphs for stream data, giving a number of non-responsive requests, network errors, and more. These are some of the well-known tools: Nagios, HappyApps, Kibana, Performance Co-Pilot, Icinga, OpenNMS, Op5.