Why I Switched my day work from Programming to Automated Testing? Part 1: More Challenging
Real professionals enjoy challenging work. I am not belittling programming here, I still code (my own apps) daily. Just automated testing is far more challenging.
The articles in this series:
My interest in programming started in high school. I received the 2nd prize in the state’s youth-programming competition. After getting my degrees in computer science, I worked in some high-profile companies for a few years and became a contractor, as a senior Java programmer. Since 2010, my full-time job title has been Test Automation and Continuous Testing coach. I develop maintainable automated test scripts instead of writing code for others. Why?
I am still programming my own apps, and consider myself a good programmer, received the 2nd prize in an international programming award in 2018.
Table of Contents:
· Test Automation is far more challenging than coding
· Coding for many Enterprise Apps is Boring
· How did I make the change?
Test Automation is far more challenging than coding
Test Automation and Continuous Testing are far more challenging than coding for typical web/mobile apps.
Many people would disagree. It is easy to prove my point, try to answer the question:
“Have you ever worked on a project that pushes updates to production daily, after passing automated regression testing?”
Most software projects can ‘meet’ the deadline. However, few IT professionals have seen successful test automation or real Continuous Testing.
“In my experience, great developers do not always make great testers, but great testers (who also have strong design skills) can make great developers. It’s a mindset and a passion. … They are gold”.
- Google VP Patrick Copeland, in an interview (2010)“95% of the time, 95% of test engineers will write bad GUI automation just because it’s a very difficult thing to do correctly”.
- this interview from Microsoft Test Guru Alan Page (2015)“Testing is harder than developing. If you want to have good testing you need to put your best people in testing.”
- Gerald Weinberg, in a podcast (2018)
I like to work on challenging stuff. I want to be in the top 0.25% (quoted from Alan Page’s figure) of test automation engineers who write good GUI automation all the time, and I achieved that.
Coding for many Enterprise Apps is Boring
Before Angular.js became popular, the most demanded programming languages were Java and C#. I started coding in Java on its first stable release JDK 1.0.2 (1997). A few years later, I became a contractor programmer; thanks to the strong demand, finding the next role was not hard.
One advantage of being a contractor is that I have worked on many projects. Gradually, I found coding web apps boring. Most of the time, just putting a piece of code into a web framework’s (e.g. React) structure.
“towards the latter half of my time, the engineering work started to feel like copy-paste.
Need to spin up a new microservice?
Copy paste an old one, change the business logic, and you’re done.”- Michael Lin’s “Why I Quit a $450k Engineering Job at Netflix”
A typical piece of web programming work is as below:
Create a web form and collect the user’s input
Parse user’s input as request parameters
Query and Update the database (SQL), may wrap some operations into a service.
Display results on a response page
Testing it manually
The software development market has grown significantly over the last 2 or 3 decades; many people joined the IT workforce. Along the way, some frameworks come and go, such as Rational Model, JSP, Enterprise Java Beans, Struts, Spring, Hibernate, …, etc. Some of the frameworks (such as EJB) and processes (such as RUP) did not make sense at all.
Software development became dull (some joked: cutting code from Stack Overflow), and programmers take less pride in their work, poor software quality, delays, too many meetings, overtime…, etc. In a word, programming in software projects can be unproductive and quite stressful.
Quiz: Steve Jobs like to demonstrate Apple’s product. Have you seen your project manager demonstrated the software?
How did I make the change?
The book “Beyond Java: A Glimpse at the Future of Programming Languages” by Bruce Tate (author of the Jolt Award-winning book: Better, Faster, Lighter Java) opened my eyes. As a renowned Java expert, Bruce raised one thought-provoking question: “maybe the language (Java/C#) is the problem or at least one of them. Java/C# is based on C++, which are designed from system programming. Therefore, Java/C# is not suitable for programming enterprise apps”. By the way, the ‘Beyond Java’ book is about how Bruce, a renowned Java expert, led a project that its Java programmers were switching to coding in Ruby on Rails.
Not long after, I was extremely fortunate to have a chance to pair-program with a famous Java programmer, who taught me test automation and CI. The open-source CI server he and Aslak Hellesøy (creator of Cucumber) was written in Ruby.
So I learned Ruby, Wow, I entered a new world. Programming is interesting again. It only took me, a veteran Java programmer, a couple of months to think in Ruby (rather than Java) when coding. It was a bit scary because I programmed Java for eight years. I often prototyped the idea in Ruby first, then coded in Java, with improved productivity (than myself three months ago). Soon I realized that I would not be able to work as a Java Programmer for long.
While I started working as a test automation engineer/consultant/coach in 2010, I still do programming on a daily basis, for my own apps, in my spare time. For example, I am coding TestWise in C++, BuildWise server in Ruby, and BuildWise Agent in C++. The above are system software. Also, I created several web apps ClinicWise, SiteWise and WhenWise in Ruby. I also coded some minor projects in Python, JS and Swift. My Selenium WebDriver Recipes Book series covers all of Selenium’s official five languages.
When programming system software, I enjoy the challenges. When I figured out a better design, such as using a GoF pattern, I felt happy.
When developing web apps, I spent >70% on Continuous Testing. Coding (web app), to a real test automation engineer like me, is a minor and easy task. I know some might disagree, however, my apps are solid proof. Check out: Reflections of Software I Created over the Last 14 Years in My Spare Time.
(I will write a separate article on why developing maintainable automated scripts is mostly harder than coding).