What is the tester's New Year's resolution in 2018? Become more technical. Even if you're not technical, a few...
hours of dedicated study of software technical skills can move the needle.
Software development is going through a sea change. Skills, platforms and technologies that were barely a blip a few years ago are now highly desirable. That rapid spike in demand means truly experienced professionals are rare or simply do not exist. There is opportunity for those willing to spend a few weeknights investing in software technical skills.
The skills in demand are mostly pulled from open source and Linux/Unix culture. If you work in an organization that uses Microsoft, Oracle, IBM, Micro Focus or some other platform, you can certainly find the equivalent tools focusing on those technologies.
Get to know Git and GitHub
Free and freely available open source version control systems, even internet-hosted, replaced networked file shares and periodic backups long ago. The kings of those systems are Git and GitHub. Having a GitHub account will make you more hireable, but it can also make you valuable.
Think of the way builds are delivered as a feedback loop. Traditional testers wait for that new build -- which might be daily -- test on it, file bugs against it and wait again. Testers with access to source code can get inside that code, see how changes happen and recommend fixes.
For example, the software has an error message that makes no sense to a user: "Error 404: Try/Catch Thrown in add employee." The tester knows this happens when they try to create a new employee who is completely identical to an existing record, and only under these conditions. The error should happen but should be clearer. The right thing to do is to change the error message, not to change the code in any other way. Without access to the source code, the tester needs to file a ticket and wait. With access, the tester can search for the text of the error, make a change and submit the change to be fixed.
A tester with software technical skills who is tightly coupled to the cadence of the build -- inside the decision loop as the software is built -- is more powerful.
Learning enough about GitHub to have a public profile and to get started is easy. Watch this one-hour video twice. The first time, watch it to understand the software technical skills and then again, with pauses, to follow along. Then, you'll know enough about Git to get started.
Once you have a GitHub account and have pushed some changes, learn how to branch, merge and create pull requests. Most online training programs offer a course in software version control for about the price of a book in a bookstore.
CI and build automation
Once your code is available in some standardized location, write a script to pull down the latest version of the code, perform a build and run unit tests, or even create a virtual server with the code installed and running. One term for this is continuous integration (CI). Jeff Atwood, co-founder of Stack Overflow, once called the build server the "heartbeat" of the project.
Creating and maintaining build automation might not be exciting, but it is one way to learn new software technical skills. It's also similar to hauling garbage, in that many people find it distasteful, so the work tends to pay relatively well for the time and effort invested. Someone has to maintain the build, and that someone could be you.
Like version control, many popular CI systems are free. Some commercial programs, hosted and run in the cloud, offer trials or even entirely free versions for solo developers. They can generally pull code from popular version control systems, almost certainly including GitHub.
To learn CI and build automation, you can learn the basics in about three hours by reading and following online tutorials.
Create test environments
It's one thing to create a build, but making the test environment scriptable so that anyone can build a test web server (or database) based on any branch or commit, at any time, is real power. One popular term for this is infrastructure as code (IAC). Three common ways to do this are coding up builds to create actual servers in Amazon Web Services, using a tool like Heroku to get a web server tied to version control on demand or writing code to manage internal virtual servers.
IAC is a natural extension of CI and the build engineer role. It is work that many people feel uncomfortable with, are not willing to do, are afraid they can't learn or aren't willing to try. Learn this software technical skill, and you might just become indispensable.
Software skills honorable mentions
There are a half-dozen emerging technologies worth looking into that didn't quite make the list of differentiating software technical skills, mostly because they are too popular. These more popular technologies mean competition, and quality professionals who want to change careers might dedicate serious time to pick up these software technical skills.
Xcode is a tool set for the Apple platform to enable iOS development. The primary programming language for Xcode is Swift (or Objective-C); learning to use Xcode involves becoming a full-blown iOS developer. Xcode has other hidden benefits, like the ability to run simulators, create builds and "sling load" code into a device without having to push it through the iTunes Store. Just learning those three things could make for a more powerful tester, one who gets even deeper inside of the decision loop of the coding on the project. Xcode is free but requires a Macintosh computer to run.
Java and Android Studio are the same concept for Android phones. Android can work with any language that can run on Java Virtual Machine, or JVM; Kotlin is currently an emerging language for Android development.
Machine learning and analytics are fascinating. If you work at a company that collects huge amounts of information, such as Google, Amazon, a bank, an insurance company or a major retailer, consider studying these concepts to improve your software technical skills. For the foreseeable future, they'll remain outside the realm of the typical tester, except in very limited domains.