Looking back on my career journey as an SDET, one of the many things that I believe could have made my journey far easier is a well-defined “Learning Roadmap”. Many SDETs, whom I have spoken to, also feel the same.
Nowadays, with so much information flowing around, it is quite common to see people getting overloaded and overwhelmed 😵 Many people are making the mistake of quickly switching from learning one topic to another in a random manner and without any clear vision. Sometimes the topics are entirely irrelevant to the SDET role and sometimes the topics are of advanced level requiring a solid foundation of the basics (which is missing). Add to that, all or most of those learnings are at the surface level, with minimum or zero practical implementation.
As a consequence, people are feeling burned out and suffering from imposter syndrome most of the time. After continuing like this for some time, they realize that they haven’t made much progress to the extent that they would have wanted to.
In my opinion, one of the solutions to this problem is to have a basic “Learning Roadmap” which can act as a reference guide 🕵️♂️ Being aware of such a roadmap and referring to it frequently will not only help the beginners to plan their learning accordingly but will also help the experienced SDETs to take a more guided learning approach, to be on track and fill up their knowledge gaps (if any). This article is my attempt to provide a somewhat realistic, primary learning roadmap (consisting of some essential tools and technologies) that will assist people to become highly effective Software Development Engineer in Test.
💡 Disclaimer: Before I go through the learning sequence, I would like to add a disclaimer and state that this roadmap is not a comprehensive one and may not fit into your individual goal. I have tried to keep it as simple and pragmatic as possible, covering the common and essential ones so that most people can easily follow it, use it as a learning guide and reap some benefit out of it. Creating a customized roadmap for individuals may require other factors to be considered as well e.g. the current project requirement, interests, aspirations, prioritization, interview preparation, etc. Also, I have not mentioned different important topics on software testing here e.g. types, techniques, models, thinking, approaches, analysis, reporting, etc. I consider software testing to be a vast field requiring continuous learning throughout the career of an SDET. I have not covered non-functional testing types (Performance, Security, Usability, Accessibility, Localization, etc.), Data Structures/Algorithms, and Soft Skills too in this roadmap.
Let’s start with the topics 🚀
How Internet/Web Applications work and CLI Usage
First and foremost, every software engineer needs to start by having an understanding of how the Internet, Web Applications, and Web Browsers work. They need to have at least some basic knowledge of DNS, Hosting, the OSI model and its network layers, protocols, SDLC, client/server architecture, the differences between frontend/backend, APIs, Microservices, and how they fit into the overall software architecture. Also, they should know how to perform different basic operations using the Command Line interfaces (CLIs) which will help them to have greater control of the operating systems/applications they will be working on later, automate tasks or troubleshoot some basic issues e.g. issues related to the network connection.
HTML and CSS
A Programming Language
After getting accustomed to the language’s basics and standards, one should move on to its advanced level (libraries and frameworks). At this point, I would recommend to stick only to that particular programming language and learn it pretty well before jumping on to the other programming languages, probably at a later point in time. I would recommend learning a Scripting Language as well, which will help to write scripts/batch files to automate repetitive tasks. Becoming proficient in a programming/scripting language is all about continuous deliberate practice and this is something that needs to be transformed into a daily habit of an SDET.
In today’s world, data is considered to be the new “natural resource”. Most of the things that SDETs will be working on will involve data. Those data can be from Test Execution, Monitoring, Reporting, Deployment, Files, Servers, Cloud, etc. Thus SDETs must learn, understand, and interact with data from various resources. Those data may be present in relational databases (SQL) or non-relational databases (NoSQL). Learning SQL will change the way SDETs think about working with data and will also help them to solve many data-related problems. The problems can be related to data storage, data access, data manipulation, data management, data extraction, etc. It will not be much difficult to learn SQL since it consists of very few commands, functions, data types, and operators. When it comes to data, it will also be important for them to learn how to drive data from other file formats like Excel, JSON, XML, and properties.
Automation (UI, API, Desktop)
Coming to automation tools and technologies, with some programming knowledge under your belt, now will be a good time to pick up any open-source, popular automation tool to perform automation at the UI layer and the API layer. At present, for UI automation, the ones which have useful APIs and good community support are Selenium WebDriver, Appium, TestProject, Puppeteer. So I would suggest to pick among these (based on the programming language you are learning) and learn the core techniques of UI automation like locating elements using different locating strategies and performing actions.
Also, side-by-side, learn the usage of different assisting tools like Chrome DevTools and testing frameworks like TestNG, JUnit, Mockito, Spock, AssertJ, Mocha, Chai, PyTest, etc. based on the language that you are using for automation. For API automation, learn the fundamentals of API testing involving SOAP, REST, GraphQL and for tools, you can choose between RestAssured, Karate, RestSharp, Postman. For Desktop automation, learning a couple of tools like WinAppDriver, SikuliX will be more than enough.
Only learning these tools will not be sufficient. Start automating various applications using them whenever you can.
Version Control System
Once you have learned how to automate things using various automation tools, learn a version control system (preferably Git). Version Control Systems (also known as Source Control Systems) are nothing but software tools that help software teams manage changes to source code over time. As an SDET, you will be writing, managing, reviewing, and modifying a lot of source code. Some will be written by you and some will be written by your team members. A Version Control System will help you and your team to collaborate well and work faster and hence learning in and out of this tool will be very helpful. Also, open a GitHub account, create public repositories in it, and push your automation side-projects if you want to showcase your automation, coding and framework designing skills to the world.
Build Automation Tools
In one of my previous TestProject articles, I have discussed in length why learning build management tools is important. Build Automation Tools (like Maven, Gradle) help us to manage dependencies, provides structures to projects, and support continuous integration in a CI/CD setup. Learning build management tools will help you a lot when you will be working on real-time projects where you won’t need to worry about automating some repetitive tasks which will be taken care of by the Build Automation Tools.
Framework Creation, Design Patterns and Design Principles
With all the necessary tools and technologies in your toolkit now, this will be the best time for you to start learning how to create Automation frameworks from scratch. While creating frameworks, learn about various Design Patterns like POM (Page Object Model, Singleton, Façade, Screenplay, Factory, Adapter, Decorator, Builder, Lazy Initialization, Composite, Iterator, Template, Proxy) in parallel. Study about the Clean Coding Practices, Coding Standards, techniques to write high-quality code from various resources, and try to implement those learnings while you are writing code for your frameworks. You will end up learning a lot by doing hands-on this way.
CI Servers, Service Virtualization, Containerization, Cloud
After spending a considerable amount of time up to this, you have acquired a lot of technical skills and you are now ready to move to the next level. At this point, pick one CI server (e.g. Jenkins, TeamCity) and start learning. Practice integrating your created frameworks into them and run your automated tests. Learn how to write pipeline scripts (using scripting languages like Groovy), how to integrate with the build management tools, how to integrate with the development build pipelines, how to trigger execution (batch, parallel) on code commits/merges or in a scheduled way. After this, you can start to learn about Cloud Computing (AWS, Azure, GCP), Service Virtualization, and Containerization with tools like Wiremock, Ansible, Docker, Chef, Puppet, Kubernetes, etc.
I have come up with this roadmap from my personal experience and I feel that following this route will help others too. We also have to keep in mind that learning is a lifelong journey and tools/technologies will keep on evolving and new tools/technologies will keep on appearing now and then. So SDETs need to be flexible in adapting to those changes, keep themselves updated, and continue learning.
Hope this article will be helpful to you. Happy Learning 😉