How to Transition from Manual QA to a Software Developer
If you work in the IT industry, you might have heard that sometimes QA professionals transition to a developer role. I made this transition myself and want to share some tips that might help you accomplish the same.
The motives for the change
What ultimately helped me to transition careers was to create a mental list of what I wanted my job to look like. The priorities included creative problem-solving, varied tasks, and working independently but still in a team environment. Programming fits the bill. Indeed, software development is rewarding for many reasons that led me to pivot my career path. I will explain some of them.
I realized I want to have a career in which I could constantly be growing at and would have enough challenges not to get bored. Repetitive work is not fun. And coding tasks are rarely monotonous. While being a software developer, I am learning something new every day. In fact, software development is so broad that even experienced programmers still have plenty of areas to improve. So, one of the advantages of being a software developer is constantly educating yourself. It brings high satisfaction in both the short and long term.
Furthermore, while developing software, I realized another benefit of being a programmer — the sheer joy of creating things makes programming engaging. Knowing that the software I built is beneficial for other people is exciting. That feeling is addictive. I cannot help but keep going back to experience it.
Moreover, it is rewarding when I win. When I solve a problem, I get a micro dopamine dose. Coding work in a big part is being stuck and then moving forward and then being stuck again and then moving forward, you get the idea. Unraveling an issue that I was stuck with feels pretty good.
In addition, if I work without distractions and interruptions, I sometimes enter a mental state of mind called flow (a.k.a. being in the zone). It is a state in which a person is fully immersed in an activity (s)he performs; the flow brings deep focus and enjoyment to the process. It also transforms the sense of time.
When I focus on a coding task with intense interest for hours, I am the most productive and do not feel exhausted afterward. That is because when I am in a flow state, I am so engrossed in my task that I automatically block out all other pieces of information.
And honestly whether while being in the flow or not, solving problems makes me rack my brains and widen my horizons. Coding opens the mind to the endless possibility of thought. I realized that knowing how to program might bring me great opportunities. I understood that I would be able to make my ideas come true once I will be able to create software by myself. Coding is one of the most straightforward ways to solve practical problems. And since I have always enjoyed doing technical and creative work, I will be able to build meaningful stuff that will benefit other people.
So, when I decided to change my career path, I started thinking of the most efficient ways I could learn to code. I am a more hands-on type-of person and already acquired some basic theoretical knowledge during my university days. I decided the best way to learn would be to work on real projects.
My journey
While working as a manual QA professional I started learning to code by building some minor personal projects. I used technologies that developers use at Revel Systems, the company I currently work at. Once I familiarized myself with those tools, I started thinking about ways I could use that knowledge while working as a QA to brush up my skills working on real-life projects.
A significant portion of developers’ time is spent on automated tests creation. It is especially true in Revel Systems. Our company maintains multiple layers of automation that developers implement. Thus, I asked if I could assist programmers in creating the tests, save their precious time and improve my skills. I was lucky — there were no objections. Shortly I started writing automated tests as a side task to performing manual tests/creating and reviewing acceptance criteria.
Soon after, I was confident enough that I could take the next step and fully dedicate myself to writing automated tests. Thus, I asked my manager if there was an opportunity to transition to a QA automation role. Luckily he supported the idea. Shortly I started to contribute to shift-left testing.
It was both a pleasant and exciting experience. I was able to familiarize myself with the workflow of developers. Also, I gained new skills by creating automated tests for our AWS data warehouse, writing functional Front-end using Cypress and unit tests using Enzyme, and creating BE unit/API tests with Python.
Writing automation tests led me to get to know our code base. Thus, after working as an automation QA engineer for a half-year, I could transition to a developer position.
How to switch from QA to a developer?
Be proactive
Firstly, start exploring possibilities on your own. The biggest mistake you could make willing to pivot your career is to wait for someone to teach you. The main challenge is to begin. Once the wheel starts rolling, it is not hard to keep the momentum.
Secondly, Make your goal known to your coworkers. People are willing to help you, but they cannot read your mind. Therefore, you have to be good at verbalizing your goals. I did it and it fell into place. My colleagues supported the idea when I explained what I aimed to achieve. They also gave me practical tips on what books to read, what technologies to learn first, and what online courses to take.
Also, be proactive and suggest doing some additional work. Often opportunities lie in tasks that nobody wants to do. Maybe some tickets are lying in the backlog for a long time that no one is willing to take. It could be a fantastic opportunity for you to acquire new experiences. For example, you could document the software or the workflows you perform so that your team members, colleagues from other teams, or customers could use it. Likewise, do not hesitate to take tasks from your teammates that are not QAs’ responsibilities (e.g. assignments of developers, PO, designers, etc.), this way you will broaden your horizons quickly.
And for you to progress even quicker, ask good questions. It helps your colleagues to improve their understanding of coding concepts by explaining those to you. And you would learn a lot as well.
Likewise, do not hesitate to suggest solutions. You might bring some fresh ideas that might make a difference to the product you are working on. Also, actively participating in the problem-solving process would benefit you as well, since you would learn how to think clearly and critically.
Create your roadmap
Web development is often divided into Front-end and Back-end development. The back-end is code for processes to manipulate the data from a database and format them into useful information to be passed into the Front-end. Meanwhile, the Front-end takes the data that is passed from the Back-end, to render it in the UI.
You could try playing around with both areas and decide which one you are interested in more and start learning from there. If you prefer Front-end development, practice technologies like JavaScript, TypeScript, React.js, MaterialUI (or alternative), Jest, etc., or any other tools that are used in the company you are working at. Likewise, get comfortable with git and using the command line.
If you are more into back-end development, Node.js (JavaScript), C#, Python, Kotlin (or Java), Ruby, and Go are among the best candidates for you. Get familiar with SQL (for example, MySQL or PostgreSQL) or a NoSQL database such as MongoDB as well.
Try some of the technologies and choose what to start from. Pick a language and get good at it. Do not try to learn everything at once. It could be overwhelming. Better create your plan and take one step at a time, going at your own pace.
Start by creating some side projects. It could be some basic apps. Practice as much as possible to get good at hands-on coding. You do not need to create complex software. Simply get comfortable with the regular syntax and solving common errors.
In case you get stuck, understand what written code is doing inside out. Also, try Google. Chances are many developers have already faced and solved the problem you are dealing with. And if googling an answer does not work, do not hesitate to reach out for some guidance in online communities such as Stack Overflow.
Start by writing automated tests
Once you have some coding skills, get some hands-on programming writing automation tests. Instead of learning an automation framework as a side project, try to automate the application that you are testing manually. If there is one, try to become a part of the automation team in your company.
Also, if given an opportunity to practice automation, never step back. Even if you are afraid of failure, do not withdraw. Either you will be successful, or you will gain valuable experience.
Furthermore, plan how to automate the application you are working on. Identify what part of manual testing is the best to automate. It could be either covering the test cases you execute in the regression phase repeatedly or parts of the app that often brake. Likewise, think of flaws that the end client encounters (for example, some performance issues) and the pain points that your colleagues face (such as flaky tests or lack of test coverage). These are potential areas to cover by automated tests as well.
Find a Mentor
Ask your team’s dev manager if a programmer from the company could be your mentor. It certainly will help you to progress in your career more quickly. Having a mentor is a big plus for several reasons.
Firstly, when you start learning to code, the high number of programming concepts you should comprehend can be overwhelming. Thus, it is beneficial if a mentor suggests to you what you should be focusing on when you start your coding journey.
Secondly, coding mentors provide real-world context. Your teacher could clarify what the developer role looks like in your organization, and what they should expect from you. (S)he can explain how learning programming tools would benefit you in day-to-day work.
Moreover, you could also shadow your mentor. If (s)he works in the same cross-functional team as you, you could pair-program with him or her. Go deep into how developers handle their daily tasks. By pair-programming, you could learn about ways of debugging, tools developers use, or plenty of useful tricks that make software development easier.
Lastly, be proactive by requesting feedback from your mentor. Receiving criticism is key to understanding your areas of strength and what you can do to improve. You could get technical feedback for the side project you are working on, or for automated tests you created, etc.
Don’t burn out
During the time I was learning to code, I spent quite some time studying. I went a bit too far. I abandoned my family, significant other, and friends. I also sacrificed my beloved hobbies and did not exercise, and sleep enough. And after some time living like this, I eventually got burned out. I needed to take a step back and spend a month without studying.
That was not the only mistake I made during my learning journey. I made some more and I wish you will be able to bypass this. Therefore, I will share some suggestions on how to avoid common mistakes that are often made when self-teaching to code:
- Do not get demotivated. You may sometimes feel overwhelmed with the amount of information you are dealing with. Or you might get annoyed because you keep running into errors while coding. That is normal. During the days when you feel down, try to adjust your mindset a bit. Try to see challenges as opportunities to grow.
- Never compare yourself to others, only to yourself in the past. To achieve that, try to track your advancements. One of the ways to track your progress is by keeping your projects in a GitHub/GitLab repository).
- Make quality sleep a priority in your life. It improves your brain performance, mood, and health.
- Find time to work out, preferably daily; such health issues as lower back pain are common among software developers. In the long run, having health problems would make you less productive, so take care of your well-being.
- Find time for people that are significant in your life; you could distinguish those by answering two simple questions:
-Is a person genuinely happy about your success?
-Are you willing to ask that person a favor that is not trivial to accomplish?
If a person is close enough to you, the answer to both questions is Yes.
- Find time for your hobbies (especially those which put you in a flow state). They bring you joy and enrich your life. Hobbies also help to restart your brain after the intense mental work of coding.
- Do not rush too much. Probably you will spend your whole life working. There is no reason to stress out. Gradually you will master the concepts, languages, tools, you name it, one way or another.
Endnote
There is no secret formula when transitioning your career, everyone has to find their way. In this article, I shared my experience, although there might be many more different paths to transition from QA to a software developer role. Hopefully, this blog post has encouraged or given some useful ideas.