It is unlikely the world will emerge from the COVID-19 pandemic completely the same as it was before the virus swept the planet. No doubt this is almost purely a story of human tragedy, but as an engineer, my ears were piqued to hear how antiquated technology was contributing to the slow response to alleviate human suffering.
New Jersey has been quite open about it’s technology issues as it relates to the COVID-19 crisis. Specifically many of the systems used to administer state programs such as unemployment benefit run on 40-year-old mainframes and requires programmers with an expertise in COBOL (a language created for the DoD in the 1950’s). From a CNBC article:
For example, an unprecedented 362,000 people have applied for unemployment in New Jersey as a result of the coronavirus outbreak, and the state’s IT department is working to have the 40-year-old mainframes that power that service up and running, New Jersey’s commissioner of labor Rob Asaro-Angelo said on Saturday.https://www.cnbc.com/2020/04/06/new-jersey-seeks-cobol-programmers-to-fix-unemployment-system.html
It would be the equivalent of having a sudden need for automobile mechanics who can repair a 1950’s vintage automobiles because 60-year-old Ford Thunderbirds made up the fleet of local police patrol vehicles.
Now it’s arguably not a perfect analogy to compare predominately software-based systems with systems that are mostly mechanical in nature. But I do believe there is an argument to be made for continuous upgrade of predominately software-based systems. And certainly, it is time to revisit any software that was written prior to the Internet becoming ubiquitous for the majority who live in developed nations.
Before jumping into the pro-upgrade argument, let’s examine some of the reasons we do not tend to upgrade systems as is the case in New Jersey. And just to be clear this is NOT a New Jersey problem or a government problem, it is a problem that is prevalent across all types of organizations across the globe regardless of resource constraints.
First and foremost, upgrading costs money. It takes the time of highly skilled workers to understand requirements, develop solutions, implement, test, debug, deploy and maintain software. While we today in work in a tech world where terms like continuous integration/continuous deployment and agile development are commonplace, this wasn’t the case not so long ago. The waterfall development methodology pervaded not only the developer mindset but also the system owner mindset. I pay for something once and then run it forever (again software being seen as non-material to many and thus not requiring much in the way of ‘maintenance’ as is understood in the mechanical sense). Additionally, there is the argument of “if it ain’t broke, don’t fix it”. The idea is that every time you crack open the codebase you are increasing the likelihood that bugs will be introduced. And this is certainly true as many software developer’s defect tracking charts will attest with a characteristic sawtooth curve. That is to say, every new release of a software build tends to introduce a small spike of new bugs that must be addressed.
But here’s the thing.
Systems = Technology + Humans
The logic of not upgrading systems over time works great if it weren’t for the fact that humans die. Not upgrading over time results in ‘cliff-face failure’ once the last person who knows about the legacy system dies. This false sense of security results in mass failure all at once, not gradual degradation. And as we are seeing now with COVID-19, that failure will likely occur when the system is needed the most due to unforeseen circumstances that cause the system to be taxed beyond what it was designed to support.
As engineers, we can become too enamored with the first part of the system equation. We love to play with new technology, we long to develop new technology, we like to solve problems with technology. There is a reason why languages like Python, Java, and C are the most popular languages in 2020 versus COBOL and Fortran.
Software-based systems are arguably immortal. Unfortunately, people are not. Technology upgrades must occur for the long-term survival of the ‘system’ cause the human part of the equation certainly changes over time.
The fundamental flaw of the laissez-faire approach to system engineering is the same flaw inherent in many systems such as capitalism or just-in-time logistics, in that they are fundamentally brittle systems that require near perfect conditions to work. Any slight deviation can have huge negative ramifications. Upgrading over time is the only way to avoid the perfect wave scenarios that are trouncing New Jersey systems today. Think of upgrading systems as ‘continuing education’ for the technology part of the system equation. Just like professionals need to go back to school every now and then to stay current, so too does our hardware and software
And here is another benefit, jobs. The youth of today are saddled with unbelievable student loan debt. Imagine being able to use your tech skills, gain experience, help society, and erase your student loan debt? That is what many are arguing for as we envision a new world that will emerge from this crisis. Advocates like Angie Murimirwa and the Maker Movement are arguing for just such a concept. Make Magazine even going so far as advocating for a modern take on the Depression-era Civilian Conservation Corps they are calling the Civic Response Corps. We could upgrade our municipal, state and even federal systems while helping students get out from the debt that is crushing them for little to no investment! Plus we would have software systems that are modern and able to stand up to the most grueling of demands.
The bottom line is doing nothing is not a good answer. We must do better because the failure of technological systems will continue to occur when we need them the most. And that is unacceptable. Especially when these systems have a direct and significant impact on the health and well-being of our fellow neighbors.