Quality Engineering Discussions: 5 Questions with George Ukkuru
George Ukkuru is a seasoned technocrat and AVP of quality engineering, DevOps, and SRE @Marlabs Inc. Over the course of two decades, he has helped Fortune 500 companies implement Agile testing practices. He has also authored a number of books on quality engineering and test automation.
In this QnA, Ukkuru lays out the scope and depth of his experience without even trying. He makes the points that non-functional testing should be higher up in your priority, that manual test data provisioning keeps you from truly reaping the rewards of automation, and that you must never miss an opportunity to celebrate good work.
Q1: What changes have you seen in SDLC and QA’s role in it over the course of two decades?
In the last two decades, I have seen:
1. The emergence and dismantlement of the TCOE model, aka Independent Verification and Validation. It started in the early 2000s. Today, TCOEs have been converted to a hybrid model as teams adopt Agile & DevOps.
2. Automation used to be a nice-to-have skill. When I started my career, automation was used for automating UI-based regression testing. Today, automation is a must-have skill, and the focus has moved from regression testing to complete test lifecycle automation.
The type of applications that are being tested has changed as well, from (now) legacy client server-based applications to microservice-based or cloud-based architectures. This changes how teams test for quality.
The focus has shifted to non-functional testing, including running security tests, API & workflow-based performance testing, Chaos Engineering, compatibility testing, etc. As technology advancement continues, we’ll see newer, more nuanced types of testing.
Q2: What’s your battle-tested process for finding and resolving bugs in Production?
Once a bug’s been found on production, I have several practices to fast-track its resolution:
1. Continuously review production tickets and identify defect trends, in collaboration with the Operations Team.
2. Use an algorithm that identifies the best developers for determining the root cause and fixing the defect.
3. Organize regression packs based on the type of fixes going into production and define when to use them.
4. Monitor social media feedback, application logs, Mobil App Store feedback to identify the issues faced by the end users and take proactive actions to identify patterns.
Q3: What are some testing anti-patterns you wish never existed?
I see several anti-patterns in software testing. But the ones that peeve me the most are:
1. Heavy focus on UI Automation. The effort and cost to maintain UI automation is disproportionately higher than the rewards, I think. UI changes frequently as the products evolve. Teams need to strike a fine balance between UI and API-based tests. API Tests are faster to design, execute and maintain.
2. Manual test data provisioning. The test data is ported to test environments after manually masking data from obfuscation. That is slow. You can’t truly automate for DevOps using this approach. Instead, teams should use synthetic data provisioning and self-service mechanisms to accelerate and automate data provisioning.
3. Late Identification of Non-Functional Defects. This is usually a result of a lack of clarity around non-functional testing requirements. Performance or security tests are seen as a part of ‘hardening’ or release-level sprints. Unfortunately, performance and security bugs often need architectural changes to fix, and keeping non-functional testing for the end of the cycle can cause schedule and cost overruns.
I advise teams to look at behavior-driven testing techniques to document security and performance requirements. Engineers should also integrate and execute API-based performance tests and SAST/DAST scans to the DevOps pipeline.
Q4: If you had to restart your career today, what key lessons would you take from the past?
Master at least one programming language, preferably Java, Python, or C#, so that you can design and create scripted tests.
Focus on taking up courses around test automation, either with open source or commercial tools. Or both.
Spend time learning about practices and concepts in software testing. ISTQB Foundation syllabus should be a good starting point.
Learn about Cloud, Agile, and DevOps principles and practices. Learn the basics of tools like Jira, Azure DevOps, Jenkins, etc.
Your communication skills matter more than you think. Work towards improving them.
Q5: To aspiring leaders, what is your advice on how to be a good manager?
Take up formal courses on Agile or Project Management. Refresh your skills regularly to stay relevant.
This is my style, but I advise new managers to get actively involved in the project. Remember that you are not a people manager. Understand what the project objectives are and how it is going to impact a business or end-user. Work from there.
Understand the technologies involved so you can grasp the nuances of the project. This will help you make decisions and manage risks.
Learn the art of remote management. Here are some practices that work for me:-
- Have frequent meetings with your direct reports, preferably over video.
- Do NOT micro-manage and follow-up every hour. Trust your team. Move away from a task-based and adopt a Goal-based approach while assigning work.
- Spend time with your team to understand their strengths, passions, and weaknesses. Assign work based on their strengths and provide training and mentoring to help employees overcome their weaknesses.
- Keep your team in the loop about the happenings in your department and the larger organization. This will help take care of rumors and avoid perceptions.
- Provide feedback on the work assigned without delays. Don’t be a bottleneck.
- Never miss an opportunity to appreciate and celebrate good work.
For more experience-led insights from George Ukkuru, check his book on software testing estimation on Kindle.