Why I did it and what changed..
I have been a part of the software industry for two and a half years now. For almost 2 years, I worked as a QA Engineer/Tester. I was very happy and content with my job and role. I loved the work, I got to learn a lot, I blogged about my learnings and experiences, and even gave a talk at a Pakistan Software Testing Board Meetup. It was a big achievement for me.
The company I work at is among the very few companies in the country which are doing extensive work towards providing Artificial Intelligence solutions to a variety of different clients locally and globally. Unfortunately, I hadn’t studied any courses related to Artificial Intelligence during the course of my bachelors in Software Engineering. Naturally, I was curious and I started exploring these fields. The more I read, the more interested I became in expanding my knowledge of this subject matter.
I was a person who used to say that I am made for QA/testing and I would never be pleased if I have to do development. But at one point, I was convinced that I have probably experienced everything that I will ever get to experience in the field of testing and now it is time to move on and learn and do something that always terrified me: Development.
Another obviously very driving factor in this decision was the rising popularity of Artificial Intelligence in general and Data Science and Machine Learning in particular.
“Machine learning will bring about not just a new era of civilization, but a new stage in the evolution of life on Earth.” — Pedro Domingos, The Master Algorithm: How the Quest for the Ultimate Learning Machine Will Remake Our World
I was at a place where they were already working in the area of my interest. So I went ahead and talked to my boss that I want to switch fields. It took me a few months but he was kind enough to give me a kickstart and eventually gave me a project to work on.
In the meanwhile, I also heard about and applied (and luckily got selected) for Facebook’s pilot Open Source Mentorship program. It was a month long program where I made baby contributions to Pytorch. Pytorch is a python based deep learning framework and also helps in tensor computation with GPU acceleration. Although my contributions were small, it was a tremendous learning opportunity for someone who recently started out in development. Read more about it here.
Conquering the fear
At the very beginning of it all, it took me a while to convince myself that I can do this! Throughout my Software Engineering degree, I was never really fond of development. It was something I looked at as too complicated and something that requires a way of thinking that doesn’t come naturally to me. I could do it well enough to pass all my courses, but it was something that I never wanted to adopt as a career.
Change of perspectives
Although people belonging to Quality Assurance and Software Development are wheels of the same vehicle, they both look at the same things with slightly different perspectives. For instance, a developer might focus more on the performance of his code while for a QA Engineer, user experience would be a bigger deal. This is only natural.
As a person transitioning from QA to development, it was very interesting to not only feel that change of perspectives but also see why they are different in the first place. Also, I believe I was better able to judge what should be the priority in any given case.
Never Stopping Syndrome
Something that I find very difficult as a developer is leaving things in between. We are all aware of how important it is to take breaks and maintain a work-life balance. If I am working on something and I know what needs to be done, I don’t see the point of leaving it for later or the next day or after eating. It is very hard to interrupt me for anything when I am in the middle of something.
If I am stuck with something, I won’t rest until I get unstuck. Once I am unstuck, I get super enthusiastic about finishing whatever I was doing off. Whatever the case is, I just seem to not be able to stop.
My husband who has been a very good programmer for as long as I have known him thinks that this is something all programmers suffer from and he is proud of the fact that I feel the same way. However, I do realize that it is kind of an unhealthy practice and I am working on controlling it.
Old habits die hard! Coming from a testing background, I always tend to spend a lot of time testing my code. It has proven to be both beneficial and detrimental. One time, I was adding a new (and a bit challenging) feature in a project that I was working on. Since I know how buggy a seemingly perfectly working code can be, I spent almost a week testing it, finding bugs on my own and fixing them. This obviously lowered the chances of bugs in the production environment. But sometimes I overdo it and end up spending way more time on tasks than I actually should.
My takeaway so far has been that usually developers tend to be very defensive of their code and avoid trying out anything that can break it. It takes them some time and maturing to be open to testing and testers. Had I not been a tester in the past, I would never have realized how important it is to test the code. My past experience also helps me identify what the potential breaking points can be and how I can mitigate those risks.
All developers have to eventually grow to understand the significance of a thorough testing of their systems. If asked, I would argue that there should be a mandatory Software Testing course in Computer Science degree programs. Maybe there should also be some sort of focus on educating the employees about the importance of testing on an organizational level. But that’s an entirely different debate, of course. Let me know what you think in comments!