logo logo

A Pragmatic Learning Roadmap to Becoming a Highly Effective SDET

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

HTML (Hyper-Text Markup Language) and CSS (Cascading Style Sheets) are the building blocks of all modern web applications. HTML defines the elements present in a webpage whereas CSS constructs the look and feel of the webpage. After gaining some rudimentary knowledge on the Internet basics and CLIs, SDETs should invest some hours in learning the basics of HTML (tags, attributes, values, elements, forms) and CSS (selectors, properties, property values). Later, if she/he will also be involved in working with the front-end of web applications, a deep knowledge of HTML and CSS will be necessary (along with JavaScript). Moreover, extensive HTML and CSS knowledge will also help them a lot when they will be automating at the UI layer.

A Programming Language

After studying the basic concepts of HTML and CSS, I would recommend picking up one of the popular programming languages (out of Java, JavaScript, Python, C#) which can also be used for Automation. Start learning it with a focused mind. This language-learning path will be a long one and full of difficulties and roadblocks if you have never written any code before. Persistence is the key factor here 🔑

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.

SQL

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.

Conclusion

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 😉

Sumon Dey

About the author

Sumon Dey

Sumon is a Senior Software Engineer with expertise in Java, Python, JavaScript and DevOps. He has worked on multiple products across multiple domains which include Communication and Media Technology, Retail, Insurance and Banking. He enjoys solving problems and deliver high-quality products. With all of the work that he does, his goal is to engineer and deliver valuable software that keeps up with the latest trends in technology.

In his career, Sumon has written many tech articles on various international magazines/platforms and has a keen interest on Data Science, and Machine Learning. He has a great admiration for the Open Source Software community. As for his future goals, he would especially like to work on a product which utilizes Artificial Intelligence. In his spare time, he loves to write blogs and articles on various topics, ranging from programming, tools, technologies to actionable tips, techniques and best practices, in his personal website (http://www.sumondey.com) for the tech community. To him, learning new technologies, coding and writing is a passion. When not at work, he enjoys spending time with his family, reading books, cooking, running or watching soccer.

You can connect with him on Twitter (@blackrov2sum) or LinkedIn.

Comments

27 3 comments

Leave a Reply

FacebookLinkedInTwitterEmail