The problem is that much of the “engineering” today is software, but software engineers are not trained in concepts such as “failure mode analysis”, simulating failures, or systems thinking.
Also, today’s software systems are no longer monolithic programs: they are collections of large numbers of independent programs communicating in real time. Most programmers are not trained to create such “real time” programs; and the large number of components create the situation described by the article, namely that the system’s complexity is such that verification of the individual components is not sufficient: one must verify the interactions between the components. In today’s IT parlance, the complexity has moved into the “outer architecture” — the architecture of how the many components interact.
Developing software for aircraft generally must adhere to various standards, which require design reviews and code reviews. For safety critical systems that is a good thing. However, it is not enough. The culture of programming has shifted from an engineering culture to a hacking culture. A hacking culture is not what one wants for building complex safety critical systems. One needs thoughtful design — engineering — not “coding”.