Software engineers in the United States are very expensive to employ. This means, and perhaps rightly so, that industry leaders often bend over backward to make sure their engineers’ time is being used in the most productive way possible.
Google famously has amenities for its employees embedded throughout its entire campus, such as restaurants, laundry services, daycare centers and other services in order to make sure that their software engineers don’t have to worry about a single thing except for writing code. Google has calculated that getting the most out of their software engineers’ time is worth investing substantially more money on top of their already high salaries.
Unfortunately, most of us don’t have the resources to be able to open restaurants and daycare centers in the middle of our offices. But there are still many things we can do to make sure that we’re getting the most out of the resources that we do have.
Too Much of your Engineers’ Time is Being Wasted
Too often, we think of a software engineer’s job as being similar to that of plumbers or construction workers or other tradesmen. You simply place software engineers in front of a task, and then they crank out code and build an application. This may work when the application is very simple, but the reason Google, Apple, Microsoft, Amazon, etc. invest so much in software engineers is because they understand that great engineers are great problem solvers. They treat engineers as both the architects and the implementers – they’re not just building the bridge, they’re designing it and making sure it’s going to last a hundred years, no matter the load, weather, or any foreseeable circumstance.
However, because writing code is obviously part of the skill set that makes a great software engineer, many leaders mistake raw code output for productivity. But most scripting isn’t a great use of your best engineers’ time. Essentially, it’s like bridge architects spending time digging holes. You want to maximize the value you’re getting out of your software engineers so that they spend less time doing low-level tasks and more time solving problems, thinking about the customer experience and building great products.
You may not be able to do their laundry for them, but you should be taking the tasks they don’t need to be doing off their plates. And there are now some novel and exciting ways to do that.
The Importance of Embracing Automation Early
Automation is an ever-evolving technology that is constantly unlocking new ways to economize human time. Companies that leap-frog their competition are often the ones that adopt automation technologies before they’re fully matured and learn how best to leverage them.
A perfect example of this in the recent past is application performance monitoring (APM). Companies used to staff performance analysts to occasionally bespoke analyze the performance of an application. And if you didn’t have dedicated performance analysts, you’d have to have software engineers do it. Now, APM does it all. Humans may configure and monitor APM solutions, but they’re not spending their time performing bespoke analyses.
Another example is continuous integration (CI) toolsets. In order to ensure that deployments were pushed efficiently, entire teams of expensive engineers had to spend their time figuring out how to integrate all of the different parts of the development infrastructure. CI toolsets have largely automated those processes so that engineers aren’t required to do them anymore.
Over the last decade or so, the automation technology that the most forward-thinking companies have been adopting is machine learning.
In the legal profession, for example, machine learning is being used for discovery so that talented (and expensive) lawyers don’t have to sift through massive amounts of documents in order to find the detailed information they need. Before machine learning, paying a human lawyer hundreds of dollars an hour to manually perform discovery was necessary; the task had to be done and it required a level of expertise that isn’t cheap to find. But now, it’s a waste of time and money.
Just as associates in law firms can be doing better things with their time than digging through thousands of pages of documents, engineers can spend their time doing far more valuable things than writing code to build out the supporting frameworks and processes and structures that they will eventually use to solve problems. When it comes to software testing, the great leap forward was moving from manual end-to-end (E2E) testing of applications to using Selenium to automate the writing of E2E tests.
Where Selenium Falls Short
It turns out that Selenium falls short of its promised moniker of “automation.” As engineers know, Selenium is not actually automatic. It’s flaky, unstable, and requires a high degree of maintenance to keep tests running. It also needs to evolve as the application changes. So, the shortfalls of Selenium mean you need to have QA automation teams write and constantly, repeatedly maintain test suites – or pay your software engineers to do it.
Either way, writing test automation generally consumes 20 – 25% of budgets for software teams, which is a larger portion of the budget than everything except for the cost of writing the software itself. Not only does it cost a lot of money and consume a lot of time, but it’s something that engineers simply don’t like to do. The process of updating and maintaining Selenium can be tedious and saps energy. So when they do finally get back to solving problems and building products, they are somewhat drained and not as creative or productive as they have the potential to be. Switching costs are tough to calculate, but significant and painful.
If you’re breaking rocks all day, time crawls and you can’t wait to be done. But if you’re a sculptor and you’re creating art, time flies. You look up at some point and say, “Oh my God, is that the sunrise already?” Both sculptors and rock-breakers use a hammer and chisel, but whose heart and mind do you think is more engaged?
Take QA Automation Off Your Engineers’ Plates
In requiring up to 25% of a software department’s resources, the automated testing industry has failed to serve its engineers. Personally, I’m surprised that, with all the different applications of machine learning being applied in so many industries across the world, there hasn’t been a larger effort to remove the burden of test maintenance from the shoulders of engineers.
Fortunately, there are a number of machine learning toolsets and technologies – all immature at this point – that are emerging into this space to alleviate this burden. As these toolsets are proven to be able to successfully run QA automation, eventually everyone is going to adopt them the same way APM and CI toolsets were adopted.
While the elimination of QA automation engineering as a major function of software development is inevitable, adoption will take time. And in the meantime, the leaders who strike early, adopt these new technologies more aggressively, and have the vision to reorient their teams to take QA automation off their engineers’ plates are going to be the ones with the competitive advantage.
Think about the 20 – 25% of your software team budget that you spend on QA automation engineering. What would it mean to have half or three-quarters of that back? What would it mean to your software engineering team to have 10 – 15% of their focus restored to solving problems and building great products? Conversely, what will it mean for you if you don’t? What will it mean if you’re the last one to get there?
Just as was the case with APM and CI, this realm of the software engineering industry is at an inflection point. As these technologies are finally being developed, the market will determine which companies are going to be the industry leaders, and which ones are going to be the industry laggards. It’s your choice which one you want to be.