I was recently asked to share some career advice for an employee at a company I was working with to help them decide their career path. They were undecided about whether they should take a management role in QA, or dive deeper technically and go into performance engineering. The fact that anyone would look to me for career advice is kind of strange to me because I don’t really think of myself as someone with a lot of wisdom. I am someone who chose a career out of spite. Someone told me I could never learn LoadRunner, so I did. Someone said I could never succeed with my own business because I only had two years of college and no MBA. So I did it, if for no other reason than to prove them wrong and piss them off. 

How Do I Get Started?

I thought about it and I decided to share this with everyone. If I could go back in time at the point where I was thinking of getting involved in performance testing, these are the things I would share with myself as a place to start:

  • Study up on the OSI model. Be familiar with the layers and where things live. Understand the fundamentals of TCP/IP and how packets and traffic across the wire behaves in general. Where does HTTP/S fit (which layer)? Why is it on port 80 and/or 443? Understand networking essentials and know what DNS, DHCP, FTP, and all of those abbreviations mean.
  • Figure out how to build your own PC or server from scratch. Go out and buy the individual parts and put it together yourself. Figure out the best configuration of motherboard, CPU, memory, disk and other components. Do research into each component and find out how to build the optimal performing machine from those parts. Why choose an SSD drive? What are the different kinds of memory? What is parity? Dive into the specifics of network cards, load balancers, routers, switches, etc.
  • Make your newly built PC function as a web server. Figure out the differences between Apache, NGINX, LiteSpeed, IIS and other web servers. What do they fundamentally do? How are they the same? How are they different?
  • Write your own simple web page to be served up by your own web server. Write it in notepad in HTML and online guides. No cheating! Research how HTML, CSS, JavaScript frameworks, and other components work together.
  • Monitor the network traffic from a browser to your web server with TCPDUMP and Wireshark and look at what is passing down the wire and find out what that stuff means that you are seeing in the logs. 
  • Set up a database (like MySQL) and learn how to make your web page dynamic with a scripting language like PHP. Be able to retrieve things from the database, and update it. Learn how this communication works from the web server to the database server. Learn the basics of configuring a database server and enough SQL syntax to do some basic commands (reading and writing to the database). 

What Are The Most Important Things To Learn?

Understanding the lower level stuff like transport protocols will help you set a firm foundation for the next stage in the journey. These things would help ANYONE who wants to get into IT. If you want to get more specific with performance engineering, here are additional ideas:

Understand Quality Assurance or Quality Control principles, at least at a high level. Know what QA is trying to accomplish in the grand scheme of things. This requires knowing how the software development lifecycle works from beginning to end. There are plenty of books and blogs on this. From a performance standpoint, you need to know the “entry points” where performance plays (or SHOULD BE playing a role) along the cycle from requirements to production implementation.

Begin learning a performance testing tool, but purpose within yourself not to become just a master of the tool and its features, but of techniques and process that you can use the tool to accomplish – as a means to an end. Try out several products, including both open source and commercial versions. Believe it or not, it is OK for software to cost something to use. You may find it cheaper in the long run because of the time savings alone. Whatever gets you to your end goal – which SHOULD NOT be the scripting, but the test analysis. It’s not about how great your scripting abilities are, those are just a means to provide realistic tests and allow the truth to bubble to the surface in intuitive analysis. I recommend Neoload or LoadRunner and spending more time focused on how to interpret test results than the automation. Learn JMeter, but ensure you know how to get more than just transaction timings from a load test. You need integrated analysis that includes end user timings and other pertinent data from monitoring system resources and other things that make up the application. 

Spend time learning the right ways to plan out a performance test so it simulates the real-world as much as possible. You want a test scenario that mimics what the perfect storm is for your application, not something you just made up based on feature sets. This takes investigation, asking leading questions, and making sure it matches what the end users see. Planning is one of the most important stages of performance testing, so emphasize that when you are learning the ways of the force.

As you get hands-on experience performance testing application with specific components, go the extra mile to learn as much as you can about the inner workings. Know enough about the database you are pounding with load so that you can have a decent conversation with the database administrator. Spend some time with them and find out what they know about tuning databases. Repeat this with the network engineers and other back end administrators. 

As you learn about back end load and tuning, you will also want to get an understanding of front end (client side) performance – specifically the browser. Studying books like “High Performance Web Sites: Essential Knowledge For Front-End Engineers” from Steve Souders and “High Performance Browser Networking” from Ilya Grigorik are a good start. Learn about JavaScript tuning, third-party blocking, and how to use the Developer Tools in the various browsers that help you debug specific problems related to performance. 

Who Should I Follow?

Give yourself a year of doing this constantly before you start beating yourself up that you don’t know enough. It takes a while. Each discipline within the area of performance engineering space can take years to master. One way to speed things up is to use mentors and learn from others who have already been there and can help you avoid making some of the same mistakes they did. To do this, start following some of the thought leaders in the performance engineering space. Here is a list of suggestions and sites that will get you there:

Perbytes (and anything from James Pulley you can get your hands on):

https://www.perfbytes.com/

Perfguild (one of the conferences from Joe Colantonio)

https://guildconferences.com/

Recommended Podcast from Catchpoint

https://www.catchpoint.com/blog/devops-podcast

What makes a good performance engineer:

https://www.northwaysolutions.com/what-makes-a-good-performance-engineer/

I wrote this article back in 2004, and it is essentially what I have just outlined above (straight out of my head not looking at this article for years).  It still rings true to me. Here are some additional articles and/or podcasts I’ve had a part in over the years:

Getting started with performance testing: https://testguild.com/podcast/automation/39-scott-moore-getting-started-with-performance-testing-and-loadrunner/

If you are already QA and want to make the switch:

https://techbeacon.com/app-dev-testing/never-say-die-how-qa-engineers-can-become-performance-testers

Summary

As I reflect on all of this, I realize now that what I lack in wisdom, I make up for in self-motivation and self-discipline. These are things I cannot teach you. You either have it, or you don’t. Sometimes it is latent within you and needs to be brought out – kind of like the Marines do during basic training. If I had only one thing to leave you with as advice, it is that tenacity and just the dogged refusal to give can get you to places even when you lack some of the fundamental skills, education, finances, or privilege.  Go for it and don’t let anyone tell you cannot do something. If they (whoever “they” is) can do it, so can you. It all boils down to one thing: How bad do you want it?

I hope this helps someone. If it helps you, let me know.

About the Author

Scott Moore

Scott Moore specializes in application performance engineering and testing. This includes education, hands-on implementation, and application performance monitoring.