From QA Engineer to Software Engineer: my journey

Posted by on August 22, 2024

At the start of the year, I was a Student Quality Assurance Engineer, testing educational games at an educational technology company. Fast forward to now, and I’m navigating the complexities of accounting software as an engineering intern. How did I make this change? Why did I choose this path? And what insights can I share with others considering a similar leap?

The starting point

During my third year studying computer science, I worked as a Student Quality Assurance Engineer at a local tech company testing educational games designed to make learning fun for children. The role gave me valuable experience and provided me with a solid foundation in QA testing. However, I was eager to take the next step in my career.

After Christmas, I began searching for opportunities that would take my skills to the next level. That’s when I came across FreeAgent, a local Edinburgh firm specialising in accounting software for small businesses and freelancers. I applied, landed the internship and now here I am!

Bridging QA and development

Transitioning from QA in educational games to engineering in accounting software seemed like a huge leap, but I soon found these two roles had plenty in common. 

QA taught me the importance of paying attention to details, which is a crucial skill in development where precise code is key. Catching bugs early, understanding edge cases, and ensuring that my code was robust were all essential lessons I carried forward. For instance, while creating a new page I initially overlooked disabling the continue button while awaiting a server response, leading to potential errors. Finding this while I was testing my work, I decided to disable the button until the response was received, ensuring a smoother experience for the end user.

Familiarity with testing frameworks like RSpec and Jest gave me a head start. As well as understanding how to write effective tests, this knowledge also helped me write code that was easy to test. Seeing all the bugs in the first drafts of my code was a humbling experience and it gave me a valuable opportunity for improvement.

My experience in QA provided a solid foundation in the software development lifecycle from planning to deployment. As a QA Engineer, I created test plans, designed test cases and planned the testing phase of development cycles. But now, as a developer, my responsibilities also include implementation and maintenance and ensuring the code works as intended through continuous testing and necessary updates. This is especially important at FreeAgent, where there are no dedicated QA teams. All the developers share responsibility in testing each other’s work, otherwise known as pre-production testing.

Learning and adapting

From my previous experience as a QA Engineer, I quickly found common ground in the way we work here at FreeAgent. I was already used to working in an agile environment, but joining the banking integrations team at FreeAgent was different. This team alone was almost as large as my entire previous company’s engineering department. It was quite daunting to be surrounded by so many people! Much like the bug-tracking systems I used in QA, FreeAgent uses Notion, an ‘all-in-one workspace’, to keep track of issues, sprints, tickets and just about everything else. GitHub was also a shared tool between the QA and software engineering experiences. Having these connections helped to smooth the transition, since I was already familiar with how to organise my workflow using the tools available.

As I developed within my role at FreeAgent, I quickly realised there were many new skills to learn as well as old ones to expand on. I’ve become (debatably!) proficient in Ruby / Ruby on Rails. Working on a real-world application has expanded my coding skills and deepened my understanding of web development. Additionally, I’ve gained more experience in JavaScript with Stimulus, making my apps not just functional but also interactive. 

Learning more advanced Git features – such as rebasing – has significantly improved my workflow by allowing for cleaner commit histories and better team collaboration. Nobody wants to scroll through a commit history that looks like a novel, especially when it seems like 1,000 files have been changed for no reason! Even though it takes a little bit more time to set up, the benefits of a tidy commit history are well worth the effort.

Pair programming is highly encouraged at FreeAgent, and rightly so, it’s a fantastic way to share knowledge, solve problems collaboratively, and improve your own code quality. Pairing sessions here have been invaluable in helping me learn and adapt quickly (thanks, Lea!).

Advice for aspiring developers

If you’re a QA Engineer looking to transition into a development role, here are some tips to help you on your journey:

👨‍💻Learn to code: Start by learning the basics of programming. Online courses, coding bootcamps, and university courses are undeniably useful, but the real magic happens when you start building things yourself. Dive into personal projects, no matter how small. Think of something in your daily life you’d like to solve. Maybe there’s already a Software as a Service (SaaS) equivalent and you can try to make it yourself!

🔍 Understand testing: As a QA Engineer, you probably have a solid foundation in testing. Use this knowledge to write testable code. Applying testing concepts in code is different from thinking about them abstractly. Use your QA experience to anticipate potential issues and design your code to be robust and reliable against anything that might be thrown at it!

🌐 Get comfortable with version control: Understanding version control is crucial for collaborative development. A solid basis in Git is essential, regardless of the platform you use. Version control is not just about saving your work, but also about collaborating effectively with others, tracking changes and managing different versions of your code.

🧩 Practice problem-solving: I love problem-solving at university, but I love solving real-world problems even more. Work on coding challenges and projects to improve your problem-solving skills. Real-world projects will help you understand how to apply theoretical knowledge in practical situations.

🌟 Embrace setbacks and stay resilient: Things won’t always go as planned, and setbacks are inevitable. I faced redundancy between applying for this internship and working at my previous QA job. Despite the challenges, I made it through and found an opportunity that excites me. Remember that resilience is key, so keep pushing forward, learn from your experiences and trust that you’ll always make it through.

Reflections and aspirations

Looking back on my journey from a QA Engineer to a Software Engineer, it’s amazing to see how much I’ve grown. My QA background provided a solid foundation in testing and quality, which has been invaluable in my software engineering role. Tackling real-world problems and devising solutions has been incredibly rewarding, and I look forward to continuing my career in software development, embracing new challenges as they come.

And just to make sure my features still work perfectly after I leave, I’ll be signing up to FreeAgent myself. Just kidding! (Not really!)

Leave a reply

Your email address will not be published. Required fields are marked *