Prelude

I’m not sure why I’m getting into this topic about the zone of proximal development. It might be funny at the moment since when I started knowing about this thing, as far as I can tell, I just saw people’s comments in the YouTube section on the MF Doom lyrics (deciphering the structure of his songs), and there’s a person who commented about “this is just like zone of proximal development” and I just blurted out like WHAT?? Thus, as I read more about the topic, I just realized that it might be relevant to my own areas of expertise.

Alignment ZPD in Software Testing

So right, the zone of proximal development, as proposed by Vygotsky, refers to the range of skills or knowledge that a learner can acquire with the assistance of a more knowledgeable individual, such as a teacher or mentor. It’s a framework that emphasizes the importance of receiving guidance or support while learning something new. Within the zone of proximal development, learners are able to achieve optimal progress and experience moments of challenges that are neither too easy nor too difficult, or you can say it as “just the right pace”, that allows for an ideal level of growth and development.

To begin with the zone of proximal development (or you may call it ZPD) in software testing, I think I’ll tell you based on my own experience. 2 years ago, when I switched my career from Software Engineer to Software Development Engineer in Test, I didn’t know what to do. None. Absolutely. I only had a little knowledge about the software testing, all I knew was just to test an application/program/features → find bugs → report → bug gets fixed → I test it again. And I got it all wrong. Turns out it’s more complicated than that 😂

Here there’s a certain process that might involve me pushing my current skills and knowledge level to be right on target

  • First, I felt very overwhelmed. The first thing to do was I needed to learn fundamental testing again, and do manual testing. Adjusting my programming knowledge is a must since I need to adapt to a new environment.

  • Gradually, when I began to understand with the help of seniors/mentors and feedback from them, I tried to pick a small task to write an automation test. What I thought was that the test cases are not many but they are still on the important parts of features (just right).

  • When I’ve had enough, I will further expand my task and start progressing by learning new things such as integrating our test script into CI/CD pipeline, maintaining testing infrastructure, reporting, doing other non-functional testing, and so on

How about with QA Manual that shifts towards Automation?

This is a condition that often occurs in any company or organization to speed up the development process and deliver features more quickly while maintaining the quality of the product. Assuming all this time you have been acting as a manual tester, and the company asked you to learn automation, the possible and best scenario that you can do to learn is :

  • First, still the same as me, you will definitely be overwhelmed (HAHAHA). If you’ve never had a coding background, maybe it will be more challenging because there are one or two more steps that you need to understand (programming language and basic problem-solving skills that involve data structures or algorithms). But, keep in mind: there can be differences depending on the company’s needs

  • Second, you will start choosing the best automation tools to use. It records and plays like Katalon, or scripting using Java, python, or JavaScript, and so on, or also using an existing test framework like Cypress, Selenium, Playwright, or something else. Again, it depends based on your company’s needs

  • Next step? more or less the same as my three descriptions in the paragraph above

Notes: I’ll not explain further regarding shifting towards automation since it will be far from this topic. Pretty sure there are several topics when we talk about switching to automation such as costs, testing strategies (Integration or E2E), choosing the right stacks or the urgency

zpd

It’s worth remembering that all of these processes are ongoing processes, you will continue to learn and develop your current skills so that you can gain new knowledge beyond your expertise. Either with the help of other people or those with more experience. You will find a space to grow and unlock your potential continuously. This is called the zone of proximal development or Learning Zone.

Overall, when you’re here, you will find the “just right” moment as I said before, and it’s balanced. Since we can adapt the level of difficulty not too difficult and not too easy, which allows us to complete a task that looks difficult at first but can be completed with help or guidance, whereas when we’ve mastered all these things and you feel that the tasks you are doing are quite easy and there are no more challenges, you will be back to the Comfort Zone. But there’s a situation where even if you understand cognitively, you still can’t complete the task even with assistance from others, which causes “this task is too hard or beyond my capabilities” and we can call it Anxiety Zone.

Exploring Cognitive Development as Software Tester

Eventually, there are at least 3 stages regarding this ZPD. If you feel you’ve already achieved this process throughout your journey of learning then pretty much I can tell that you become an efficient and effective Software Tester. Since your mental models and knowledge have been refined and enhanced to the point where you are able to perform and evaluate new information and ideas with greater accuracy and precision.

But let’s talk and break it down into more concrete yet simple description of all these 3 processes based on this illustrative process

image

  • The first and foremost is the social interaction process. In the context of software testing (assuming you are a QA engineer), social interaction is the first process to bridge up and leverage your potential ability with your current capabilities or knowledge that you had. By all means, it’s just like when we are working day-to-day at our workplace. You have interactions with your coworkers, attend seminars or technical talks related to the topic that piqued your interest, do testing on your app (exploratory testing, acceptance criteria), communicate with stakeholders, and so on. When you experience this and you digest every kind of information you received and begin to understand the concepts, identify and recognize the basic concept, basically you move closer to unlocking your potential ability and moving toward a higher level. It’s worth noting that in this first phase, you might need some guidance from your seasoned mentors, to give you some feedback or just share fruitful learnings.

  • Scaffolding. Move on to the next step, there is a scaffolding process that’s pretty similar to the first steps but here you are already aware of your knowledge and capabilities and start to break it down into smaller pieces. Still the same, in this process you still need some guidance or mentors to improve your skills and provide support, but the understanding itself lies in a mix between theories or concepts that you are aware of with certain new techniques and understand the reason why we do that.

    Perhaps the best example that I will give is when you are assigned to test a big feature (let’s say a registration feature with a social media option), and you start pairing to test it with a more experienced QA/SDET engineer. Here, your senior will break it down into smaller sub-tasks, which parts will be tested by you and him/her, and afterward, when you start doing testing and you found a bug, you will share it and discuss it with your senior to get the bigger picture why this bug happens, what’s the root cause and such.

  • The final stage to achieve the cognitive development process is Internalization. In this process, we already understand and are able to elaborate further on testing techniques, use testing tools that help us, and effectively know when to use these techniques and are aware not to do something risky. This doesn’t seem to be forced but it’s indeed gained through experience and the amount of learning that we’ve gone through. When a particular person has reached this level, we can also enhance our testing knowledge and perform testing based on error-guess testing or intuition-based testing.

    Another example: at my work, there’s a Senior QA who already knows that engineers will produce bugs under certain conditions even if the feature hasn’t been developed before. This can only be achieved through a mental model that has been honed and fully integrated with their lifelong experiences. What’s different here is that we can also do reflection and retrospect, what went wrong or what made it better, and it will reiterate again in practical situation

Ending

By the end of the day, the cognitive development process related to software testing (which we work as manual or automation QA), refers to the growth and refinement of mental processes of ourselves. This mode of learning helps hone our existing skill sets and cultivate critical thinking, problem-solving, and also decision-making that are essential for effective software testing. Though if you are a seasoned tester, you can still explore new things or also evaluate the testing framework or the way of testing internally in the company, while as an entry-level tester, with this you can start mapping your knowledge and capabilities so you can step up even further. Happy reading and keep learning!