Software testing and automation is a craft in itself and is intricately as complicated as the varying technologies that it aims to verify. Whether it be a web app, a mobile app, or a complex mesh of distributed microservices, IoT apps, and whatnot.
Unlike other disciplines, People who work in Software Testing come from varying backgrounds like engineering, customer support, product management or even philosophy and arts.
As a testing practitioner throughout my career, I have been fortunate to meet and learn from many talented testers and programmers and sometimes I wonder what my career would have been like if I had got this sage advice sooner.
In this post, I want to share some of my mental models as a test journeyman with the hope that it gives some insight to people who are a bit new to the field around what behaviors can help them in their journey. (Read more about Software apprenticeship)
This is the most important lesson that I have realized. Unlike many other fields, Software is an ever-evolving field and that means 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 them?
- How can you truly ease your work if you do not know the tools of the trade to automate the tedious and monotonous 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 optimize
The good news is you do NOT need to know everything, take it slow and start really small and build on top.
"Just in time learning (JITL)" is probably one of the most underrated skill we need to develop as a software engineer.
I've realized, It's okay to NOT know everything about a topic but just enough to contribute well, and know what are the next steps to take.
— Gaurav Singh (@__gaurav_singh) November 25, 2019
There are many ways you can learn, you just have to understand how your brain works and figure out what works for you.
Some of the ways that I have discovered how I learn and work for me are:
- Listen 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. Some of them that I listen to quite frequently are
- Write 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. You can follow more of what I write on automation hacks or cross-posts on medium
- Give tech talks at my workplace or attend conferences. Public speaking while sometimes being intimidating really really makes you understand the topic at a deeper level.
- *Read books, * Reading exposes your mind to a variety of different approaches out there and really 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 generalize into an array of topics than aim to specialize. 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. If you are interested in knowing how I maintain my notes, you can check out this post
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 Proverbquoted by
Isabel Lady Burton (1831-1896) ** in
_ **“The Life of Captain Sir Richard F. Burton” _
I cannot stress this enough.
Yes, an argument can be made that as a tester our mind is our biggest asset and using it we can creatively find out deviations between expectations and the reality of our 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 and nightmare killing many budding tester’s love for the craft.
So, is there a way out? …
What I have found is that 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 team on missing test cases during code reviews, or even contribute some of that code yourself
- Allows you to grow in your technical skills since code does not become a barrier for entry
There are many paths you can take, however, if you are just beginning then maybe below 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 organization 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
As a tester, We are in many cases 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 negotiations and collaborations.
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 identify gaps by bringing in the user’s perspective and communicate them back in a respectful manner
- Be able to collaborate and pair in an empathetic and neutral way with devs when you tell them about the bugs that you just found in their code and negotiate for time to get priority fixes in sooner
and many more …
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.
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.
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 ** and 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 specializing in a few core skills that really piques 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 and triggers you to think more in these directions. 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 certain other areas to add. Until next time. Cheers!