Advice from a Test Journeyman
By Gaurav Singh
Software testing and automation is a craft as intricate as the varying technologies it aims to verify. Unlike other disciplines, people who work in software testing come from varying backgrounds — like engineering, customer support, product management, or even philosophy and arts.
In this post, I want to share some of my mental models as a test journeyman. Hopefully, these will provide some insight to people who are a new to the field on what behaviours can help them in their journey. (Read more about Software Apprenticeship).
1. Always Be Learning
This is the most important lesson of all. Unlike many other fields, software is ever-evolving.To be really effective as a tester, you should first and foremost be prepared to be a constant learner.
Consider the below questions:
- How can you find deviations in the app if you do not understand how the system itself works?
- How would you know the system does not work if you do not understand the components and technologies behind it?
- How can you truly ease your work if you do not know the tools of the trade to automate the tedious parts of testing?
Learning is never a finite point and as you grow in your career you would find that there is an opportunity to learn something new in even the most mundane of tasks — if you are willing to observe and optimise.
The good news is you do NOT need to know everything, take it slow, start really small, and build on top.
There are many ways you can learn, you just have to understand how your brain works and figure out what works for you.
Cool, but how do I learn?
Some of the ways I discovered work best for me are:
- Listening to podcasts on my daily commute. They really help in getting to know what other testers/developers are experiencing in their careers and get useful insights.
- Writing blogs. I’ve found that just the act of explaining something that I have learned to others makes it clearer to me, since I am forced to think about it more deeply.
- Give tech talks at my workplace or attend conferences. Public speaking (while sometimes being intimidating) really helps you understand the topic at a deeper level.
- Read books. Reading exposes your mind to a variety of different approaches and helps in discovering stuff that you don’t know and should understand well enough. The trick is to not limit yourself to just books on testing, but generalise into an array of topics.
Here are a couple of reading lists that I am currently attempting to go through: The Gojek essential reading list, Recommended reading for developers
- Most importantly, learn to keep notes for yourself so that you can revisit these at a later point in time.
The above are just some of the small ways in which you move further down the Five Orders of Ignorance, a fascinating concept in itself. More on this in a future post.
He who knows not and knows not that he knows not, is a fool — shun him!
He who knows not and knows that he knows not, is unlearned — teach him!
He who knows and knows not that he knows, is asleep — awaken him!
He who knows and knows that he knows, is enlightened — follow him!
An Arab Proverb quoted by
Isabel Lady Burton (1831–1896) in
“The Life of Captain Sir Richard F. Burton”
2. Learn to Program
I cannot stress this enough.
Yes, an argument can be made that for a tester, the mind is our biggest asset and using it we can creatively find out deviations between expectations and the reality of the app under test.
However, a large chunk of our time goes into executing large volumes of tests/regressions. Running them manually all the time can quickly turn into an exercise in pain, killing many budding tester’s love for the craft.
So, is there a way out?
What I have found is having a solid foundation in programming serves a number of uses:
- You become equipped to write test automation, frameworks, and utilities to solve interesting testing problems, be it to sift through thousands of log files or create smarter solutions to your testing woes
- As you learn and grow, You become equipped to read the application code (frontend, backend, network, etc) and can make much better recommendations to dev teams on missing test cases during code reviews, or even contribute some of that code yourself
- It allows you to grow in your technical skills since code does not become a barrier for entry
How to learn:
There are many paths you can take, however, if you are just beginning, maybe this approach can work for you:
- Pick one programming language (either dynamically typed like Python, JS or statically typed like Java, Kotlin, etc)
- Learn the language basics through numerous courses, blogs, articles on either Udacity, Skillshare, Udemy, Lynda, Pluralsight, or even YouTube
- Build (or start contributing to) an automation framework (either API or UI)
- Iterate and improve on it
- Once you are done with the basics, Learn another language, the more languages you learn, the better you can appreciate the idioms and patterns and this opens you up to a broader understanding
- Find the masters, other journeymen or apprentices in your organisation and follow them or ask for feedback on how you are doing. Maybe even ask them to review your code in order to know the areas where you can improve
- Most importantly, persevere and stick with it, even though it might appear hard initially, the payoffs are amazing at the end.
Do, or do not. There is no try — Master Yoda
3. Communicate and Collaborate with Compassion
Testers often serve as a bridge between PM, Devs and business folks. The role demands you to be a generalist and be effective in communicating and getting people to work together to achieve the common goal of shipping a quality product sooner.
Now, this means that you need to be particularly adept at negotiation and collaboration.
Some of the common use cases where these skills are needed are:
- Convince devs/PM/Business of the value of test automation and building testability into the app right from the start
- Getting involved in feature discussions and identifying gaps by bringing in the user’s perspective. Then communicating these in a respectful manner
- Collaborating and pairing in an empathetic and neutral way with devs when you tell them about the bugs that you just found in their code. You also need to negotiate for time to get priority fixes sooner
No easy task if you ask me. But a vital skill to develop early on in your career. If you can learn to be an effective communicator, it can set you up for success in your testing career.
4. Be a Generalising Specialist
Yes, I know it sounds like an oxymoron. 🙂
Testing as a role demands the person to be flexible and learn about an array of technologies based on the project that he/she is in. For instance, if you are testing a web application then knowledge of how the web works, Javascript, HTML, CSS, Selenium can go a long way into enabling you to debug issues better.
Or If you are testing mobile apps on Android/IOS then a certain level of familiarity with Espresso, Android Studio, XCUITest, Xcode, Appium is good to have.
The only constant that we as a tester can count on is change. Thus, instead of aiming to be a specialist in just one tech, for instance, UI automation, it is better to be a generalist in many different technologies at different levels of the tech stack while specialising in a few core skills that really pique your interest.
Overall, It is very important to keep your mind open to new learning opportunities. This also means that you as a team member become more versatile and by extension are able to bring greater value onboard.
I hope this post gives some level of clarity to a reasonable path to grow in testing as a career choice. This list is not exhaustive in any way and as my experiences change, I will definitely revisit this.
Let me know in the comments if you have any ideas to add. Until next time then. Cheers!