Why does DevOps recommend Shift Left Principles
By Sourojit Das, Community Contributor - January 10, 2023
The global scale of Digital Transformation has prompted IT and business teams to move faster in order to meet the constant demands of an evolving market. The universal adoption of Agile and DevOps methodologies strive to reduce the delivery time, and yet continue to improve the quality of the product for every successive release.
For organizations seeking to leverage these principles, the path to delivering product faster means shorter sprints. This means optimizing velocity, productivity, and efficiency by more frequent code releases, faster incorporation of customer feedback, and minimizing costs arising from bugs and defects.
However, traditional release models have always shifted testing to the extreme right of this pipeline, and thus the need for greater velocity can lead to severe quality issues and prevent the organisations from achieving their goals.
Many teams consider software testing to be of relatively low priority, since some consider tests to be a hindrance in the building of a “baseline” product. The end result of this mind-set leads to testing being conducted in a narrow window prior to release. This prevents the necessary quality checks from being conducted the way they are supposed to be, and there is an environment of tension between developers and testers since testing is often seen as a bottleneck.
This attitude leads, at best, to increased rework and costs when a critical bug is discovered at the last minute; or, even worse, derails the entire schedule.
With the emphasis firmly being on increased production velocity while not compromising on testing and quality, the QA approach known as “Shift-Left” has come into prominence in the world of Agile and DevOps.
Read More: DevOps Testing Strategy
What is Shift Left Testing
Shift-Left Testing is the general practice of moving testing, quality assurance, and performance evaluation activities to the “left” of the traditional software development lifecycle. The ultimate goal of shift-left testing is to detect and resolve issues early to avoid needing to rework the codebase later on, thereby ensuring on-time delivery of the product and increasing overall development velocity and reliability.
It embraces the DevOps principle of Test Early, and Test Often and helps anticipate changes during a development process that can affect product performance or other delivery processes. Shift-Left should ideally start even before the codebase is created and begin the verification of APIs, container configurations, microservice interactions, etc., from the base technical documentation itself.
Sometimes, Shift Left testing can incorporate practices pertaining to BDD-like testing as well and implement templates to determine whether the nature of the product being created is the same as the client expectations as encapsulated in the business requirements. Ultimately shift left ensures that there is consistency between the product developed and the design envisioned.
Shift-Left Principles in the DevOps Cycle
Must Read: What is Shift Left Testing
Why does DevOps recommend Shift Left Principles
The main goal of DevOps is to ensure the creation of a sustainable infrastructure and ensure highly scalable application delivery at increased velocities.
When, as in traditional models, testing is bracketed towards the end of the development cycle, there are two main challenges:
- Increased cost of fixing the bugs
- Increased complexity of resolving the defects and thus reduced product velocity
These will now be discussed in greater detail:
1. Shift Left Reduces the Cost of Fixing Defects
A NIST study has shown that resolving defects during production can cost up to 30 times more than resolving it in the development phase.
Cost of fixing bugs compared to the time of detection
Bugs identified during development are easier to fix than those uncovered in production because these code units are relatively small and more manageable. Once these are merged into the main branch, the scope widens as it becomes similar to finding a needle in a haystack. The greater dependencies also cause issues in defect resolution.
Since it is easier to detect bugs earlier, it is easier to implement corrective steps and strategies to resolve these issues and improve the overall quality of the software development process while maintaining a high codebase quality
2. Shift Left Improves Overall Product Release Velocity.
Since it is relatively easier to detect bugs early on in the development process, the strategies of Shift Left can be adopted to ensure that issues are identified as early as possible and the overall quality of the product can be maintained from the get-go.
Agile processes prioritize short sprints with well-defined deliverables. These need to be fully functional and adhere to the business and functional specifications for the set of user stories involved.
If the focus on quality starts early on, the stakeholders can be reasonably confident that all the code that is being shipped matches the functional as well as non-functional specifications.
A Shift-Left Approach fosters a greater understanding of the business requirements, software design, architecture, and coding best practices from the get go. This allows business analysts, developers, and testers to ask tough questions and seek the necessary clarifications before going ahead. This in-depth involvement and understanding allows QA’s to obtain end-to-end knowledge about the application and experiment on various scenarios based on how the software is likely to behave. This leads to an overall robust development and design process as well, which is absent in traditional models.
Perhaps, an even more significant outcome is the fact that Software Quality becomes embedded in the overall company culture, and it builds a sense of responsibility in developers, DevOps engineers, BA’s, Managers and even high level business stakeholders.
How to Implement Shift Left in a DevOps setting
It is not difficult to implement Shift Left Principles in any DevOps process. All it needs is a few simple steps:
- Include developers in QA Activities
Developers and testers can coordinate to ensure that code snippets are tested before being merged to the main branch. This ensures quality at the grassroots level and helps resolve bugs before they can affect other parts of the code.
- Provide testers with some coding knowledge
DevOps ideally requires developers to know about testing, and vice versa. Though neither group is expected to be proficient at a high level in these tasks, it increases the overall release velocity as developers can now perform basic tests, and QA’s can help with some quick fixes.
- Include testers in the Development process from an early stage
Shift Left performs optimally when QA’s are involved from the initial sessions themselves. Having an understanding of how the app is being designed and built allows QA’s to plan a proactive Continuous Testing process and focus on any vulnerabilities in design.
- Increase the scope of automation
Automation is absolutely key to implementing a successful Shift Left Practice in any DevOps process.
One of the main reasons testing was traditionally done at the end of software development was the fact that manual testing processes are too slow to provide relevant feedback in a short enough time frame for it to be incorporated in Agile sprints.
Test automation has been proven to play a key role in Product Release Velocity.
A very apparent example comes from regression tests. Once any bug has been identified during a sprint, the changes are made, and the new code is then pushed into the system. However, before these changes can be merged into production, they need to undergo regression tests in order to ensure that the intended functionality works seamlessly. Automation testing can help significantly reduce the test run time and allow for quick turnarounds.
Pro Tip: Testing using a cloud-based grid allows easier maintenance of the overall system as this is handled by the service provider. BrowserStack’s cloud Selenium grid offers more than 3000 devices and browsers for a comprehensive testing under real user conditions.
Simply Signup for Free and start running your Automation Tests on BrowserStack Automate, and connect your popular devOps pipeline. BrowserStack supports integrations with CICD tools such as Jenkins, Travis CI, CircleCI, Azure, GitLab, Bamboo, etc.
The power of Parallel Testing can be used to further increase the benefits reaped from test automation. A test automation suite which takes 90 mins to run, can be executed in a mere 30 minutes by running them in 3 parallels.
- Test on Real Devices: All tests, including unit tests, need to be conducted on real devices for optimum results. Testing is only 100% effective when the tests are executed under real user conditions. Emulators/Simulators and Virtual Machines cannot fully replicate the specific conditions under which devices operate and thus, their results do not inspire sufficient confidence to push the code to production.
For both manual testing and automated Selenium testing, real device testing is absolutely crucial in obtaining reliable results. Organizations prefer cloud-based testing infrastructure in order to avoid the prohibitive costs of setting up an in-house lab.
Advantages of Shift Left Principles
Applying Shift Left Principles in DevOps offers the following benefits:
- It reduces costs as bugs are now detected earlier and are cheaper to fix.
- It improves the overall product quality due to an increased efficiency in the software development process.
- It increases product release velocity as the codebase is now more robust and ready for deployment.
Best Practices in Shift Left
It is not enough to simply consider Shifting Left in terms of DevOps. Some best practices need to be kept in mind for the same –
1. Early planning is needed to successfully Shift Left: Once the basic requirements have been identified, all stakeholders must identify a process to accommodate Shit Left strategies into the mix. Test Planning and Creating Test Strategies are crucial for Shift Left implementation.
2. Static Code Analysis: It is used to analyze the code without executing it and offers a primary check for:
a. Programming-related errors
b. Code standard violations
c. Anomalies in the syntax
d. Issues with codebase security
3. Create Continuous Feedback Loops: The primary purpose of shift left testing is to be able to close the gaps in communication between testers and developers and resolve defects early in the process. Creating a constructive feedback channel is key to implementing this behaviour.
A Final Word
Shift Left testing leads to a robust and error-free development process and prevents bugs from blowing up right before production. It reduces the time and effort required to resolve defects and generates a greater degree of confidence in the overall development process. With software teams looking to increase their competitive advantage by being able to ship code faster and more frequently, Shift Left ensures that quality is maintained and product release velocity is not hampered.