A large volume of articles has been written recently on the impact of automation on the information technology (IT) job market in India. Projections and predictions are particularly dire. Headlines such as "Automation to kill 70% of IT jobs"[1], "IT sector to lay off up to 2 lakh engineers annually for next 3 years"[2], etc., are all too common. Some actual job losses are also being attributed to automation [3]. Automation-related concerns have also caught the attention of policy makers, politicians, and popular media - the discussion is largely about not whether, but how many IT jobs would be lost due to automation and what should be done to stem these potential losses.
These discussions make several implicit assumptions - the biggest and most crucial one being that technology exists (or will exist soon) to replace a large fraction of the Indian IT jobs. Surprisingly, there has been a lack of discussion about these assumptions. Are they even true? In this article, I will argue that that the inherent crucial assumption that most Indian IT jobs are replaceable by technology is largely false.
The Indian IT industry contributes 9.3% of the GDP of the country and is predominantly service-based. A large fraction of the IT industry consists of software programmers and program testers. The IT industry should be worried greatly about the threat of automation only if a machine (e.g., a computer) today or in foreseeable future could replace the job of the programmers and the testers. So, let us ask the question - how good is today's technology to automatically generate or test software?
The field of computer science that attempts to automatically generate software from a high-level specification is called program synthesis[4]. Program synthesis, as a field, has been around for at least sixty years. However, the state-of-art program synthesis tools, even after all these years, cannot automatically generate software more complex than what someone with less than a month of training in computer programming can write. Furthermore, even in those instances, the generated software is often considerably slower than what a human programmer can write.
This is not too surprising if you consider what automatic generation of computer software entails. Computers are not true creative machines like humans. However, they are very good at repetitive tasks. So, the task of automatically generating software must be mapped into some sort of repetitive task for a computer to perform. In program synthesis, software requirements are first specified mathematically. A computer is then given a task to search through the space of all possible computer programs in order to find a program that meets the software specification. If a computer program that meets the specification has been found after a search, we say that the computer has automatically generated the program. The problem with this approach is that the number of possible program is enormous for any meaningful specification.
So, the search never completes (i.e., takes infinitely long, for all practical purposes) for anything other than trivial program sizes. Stated differently, a computer can automatically generate only trivially small software programs - any program with non-trivial size (more than a page, for example) cannot be generated by a computer.
If indeed machines cannot generate computer software, we will need human programmers. It is, therefore, a very far-fetched idea that a large number of software programmers forming the backbone of the Indian IT industry will lose their jobs due to automation.
A similar argument can be made regarding software testing jobs as well. Testing software involves knowing the golden output of the software (i.e., the output that a correct software implementation should produce) corresponding to a set of software inputs and checking whether the actual software output is the same as golden output. Automating the testing process, therefore, involves generating golden outputs from a software specification as well as generating software inputs that can uncover all (or most) of the bugs in the program. An argument may exist for replacing human testers only if automated tests are at least as effective, efficient, and economical than manual testing.
Interestingly, test automation is less effective and economical than manual testing in most cases. In fact, test automation makes sense only when the software under test is not expected to change (frequently) in future and is not tightly integrated with other products. However, software today is increasingly developed using an incremental approach where changes are made till the last minute before release. Similarly, software increasingly relies on reuse to reduce development costs which, in turn, forces integration with other products.
Automation also requires that there is no tight release schedule or budget pressure since developing test automation framework is expensive both in terms of time and money. However, most software today is developed and shipped under considerably tight release schedules and under considerable budget pressure. Furthermore, for many applications, testing is an interactive, cognitive process (think evaluating the effect of a software change on the user interface) - such processes can't be automated well.
Even in (the small fraction of) scenarios where test automation is prima facie a good fit, it is not clear if it can reduce labor costs. The cost of developing and managing test automation along with the new tasks necessitated due to automation (e.g., reviewing test results) can often outweigh the labor costs of manual testing.
Unsurprisingly, practitioners consistently report dissatisfaction with test automation frameworks, going as far as calling test automation snake oil[5]. Only 6% of the practitioners, according to a 2012 survey [6], believe that that software testing can be fully automated. Even for the scenarios where test automation is used to augment manual testing, 45% think that the current tools are inadequate.
Furthermore, test automation is not a new technology - test automation frameworks are already being used to the extent they are found useful and economical. Most of the test instances that have not been automated are simply too hard or too uneconomical to automate. In fact, one may argue that poor automatability of software testing is the reason why the testing jobs were created in the first place. There is simply no reason to believe that existing program testing jobs will be lost in droves in future due to automation.
If both programming and testing jobs are safe from automation, what then is driving the Cassandrian prophecies about the impact of automation on Indian IT industry? Indian IT industry is in dire need of restructuring. Slowdown in growth, changing applications (e.g., machine learning), changing metrics (billable per hour vs billable per outcome), changing world politics ("America First"), and legacy overheads (e.g., bloated middle management - 10-15% of payroll in some companies) require shedding existing jobs and creating new ones. Retraining works in some settings, but it is uneconomical or infeasible to retrain for jobs requiring specialized knowledge (think deep learning).
Automation with its impressive recent advances and even more breathtaking promises is a convenient scapegoat - a proverbial fig leaf that allows the IT industry to make the necessary hard decisions in a volatile environment. A misunderstanding of the hardness of replacing human programmers and testers with machines further leads to erroneous analysis and wrong conclusions. The observed volatility of the IT sector and frequent job losses might be further feeding the fear of automation.
If anything, we may be entering a golden age for Information Technology. New applications such as personalized medicine, virtual reality, global scale computer vision, and autonomous systems (think drones and self-driving cars) will lead to much greater IT needs than ever before. Internet of Things (IoT) is increasingly becoming a reality - IoT backends will need development, testing, and support. Untouched markets are seeing IT penetration (think a roti-maker or a 3D printer) - such markets will create new IT demands.
The Indian IT industry and policy makers must be focused on the question: how do we prepare ourselves well for these coming opportunities? All tools to improve competitiveness, quality, and efficiency must be leveraged to survive and thrive. This is not a time to entertain a bogeyman such as automation.
Author is an Associate Professor in the Electrical and Computer Engineering Department at the University of Illinois at Urbana-Champaign (UIUC).