I came across a thought-provoking article the other day that postulated the eventual obsolesce of software engineers. The author draws parallels with the renaissance enjoyed by those who write software today, with those who operated telegraphs in centuries past: eventually tools to create software itself will be good enough to displace those whose jobs are to write it.
I don’t buy the telegraph operator parallels; there have been too many jobs made obsolete by technology that it’s easy to pick out a couple that have some similarities to modern work and extrapolate downfall.
This is not the first time people have worried about the future of software development as an occupation, myself included. As folks who understand the ins and outs of software – its strengths and limitations – it’s easy to imagine both that our software is very far from being able to write itself, yet be able to progress rapidly if they ever started developing those capabilities.
So if we assume that software cannibalism is inevitable, which areas of software are the most vulnerable to self-disruption?
One answer is low-level tooling. We already see this with the manufacturing of computing hardware; every new iteration hardware requires sophisticated software that itself runs on previous generations of hardware. There are no jobs around manual layouts of silicon and metals, as all the ground-level design work has been automated. The upside is that human intelligence is now being applied to higher levels of design, in thinking about chipset architectures and optimizations.
Another answer would be computer environment management or operations. Again, better software has been eating away at this for years, so much so that we don’t think of it as cannibalization. Between more robust personal software (apps and operating systems), moving data to clouds (adding resiliency and accessibility), and better system management tools (virtualization, containerization, et al), there are nice economies of scale and automation that have all but eliminated the traditional, “let me install Microsoft Office for you” tech support role.
On the other side, one area that has resisted automation is HCI – Human-Computer Interaction. Despite Japan’s best efforts to emulate human behaviors, robotics are a long way from appearing natural, and software-designed interactions are further away still. The path to interface automation is inherently difficult for computers: human behaviors and preferences and nuances are a lot more varied and unstructured than any computing system. Automation is all about codifying a set of rules for machines to execute, but we’re not even sure what those rules are when it comes with people.
In other words, people are hard.