Tag Archives: programming

The world financial crisis: a programmer’s perspective

I wrote the piece below some ten years ago, during the height of the Asian financial crisis. Because of its relevance to the current global crisis, I’m posting the piece here.

Globalization: poor design?

by Roberto Verzola

Most successful designers of complex systems follow basic rules of design.

Whether it is a spaceship that will land men on the moon, or a worldwide network of ten million computers such as the Internet, or a huge computer program with fifty million lines of code, or a tiny computer chip with two million transistors on it, the design rules are surprisingly similar.

One of the most basic rules in designing complex systems is called modularization. The rule says one should break up a complex system into smaller parts. These smaller parts – usually called modules – should be more manageable and relatively independent from each other. The modules should interact only through a few well-defined interfaces. Each module should have high internal cohesion. The coupling between modules should be minimized.

A good example is the Apollo lunar mission. One of the most complex systems ever made by human beings, it used modularization all through out, from the design of the spaceship itself, to the electronic circuitry that comprised much of its automatic intelligence. The mission’s spectacular success is a tribute to the effectiveness of modular design.

Another example is the Internet, a computer network designed to survive a nuclear attack. Again, the basic rule in the design of the Internet was modularization. The Internet implements communications through relatively independent network layers which interact with each other only through well-defined interfaces. Internet communications protocols have also been broken down into simpler protocols. There is a protocol for transferring mail, another for news, and still another for files.

In economics, modularization means that countries should try to become as self-sufficient as possible and as independent from each other as possible. It means that interaction between economies should be minimized and should occur only through well-defined regulations. Coupling among economies should be minimal.

Globalization, the current trend among economic planners, violates the design principle of modularization. By tearing down “well-defined interfaces” between economies, globalization increases the coupling among countries and makes countries more instead of less dependent on each other.

A complex system with high interaction among its parts becomes more prone to system failures. It is difficult to modify and to improve. It becomes error-prone, yet the errors are more difficult to identify and to correct. In a poorly-designed system, attempts to correct errors often introduce more errors into the system, making it even more failure-prone.

From a systems view, a globalized economy is a badly designed economy. It will be prone to errors and failures. It will be difficult to maintain and to improve. Attempts at correcting its failures will result in even worse problems.

Look at the problems of today’s globalized economy. Because of the free movement of goods, diseases spread quickly from one corner of the globe to another. CFCs produced in one country damage the ozone layer and threaten the health of the citizens of other countries. Toxic wastes produced in the North find themselves being dumped in the South. Chernobyl’s radioactive emissions threatened the dairy industry of the rest of Europe. A stock market crash in the U.S. would probably send stock prices worldwide tumbling. Because of the free movement of capital, job insecurity as well as speculation has become a global problem.

These are all the consequences of the bad design inherent in a tightly coupled global economy.

Despite this, economists often insist that globalization is inevitable, and the best we can do is to adjust to it.

For a designer’s viewpoint, of course, there is no such thing as “inevitable.” Every design is the result of a conscious or unconscious effort. Poor designs become inevitable only because the designer relaxes on his rules, and adopts an “anything goes” approach. To the economist, on the other hand, relaxing the rules is called “liberalization”, “deregulation”, or “leveling the playing field”. And “anything goes” is called “free-market competition”. A relaxation of the rules then makes it easy to violate the basic principles of good design, and makes globalization inevitable.

Who want the rules relaxed? These are mostly the global corporations, the main beneficiaries of globalization. They are the equivalent of global variables in software.

Software engineers try to eliminate global variables or turn them into local variables. Because global variables can easily cause changes behind the back of the system designer, they make the whole system unreliable and crash-prone. When global corporations use transfer pricing to maximize profits at the expense of the host country, or when they switch to highly automated equipment and minimize local employment, or when they compete with local entrepreneurs for skilled labor or for bank loans, or when they suddenly pull out liquid assets for some reason or another, we are witnessing what system designers call the “undesirable side-effects of global variables.” Thus a fundamental rule in system design is to avoid global variables.

Faced with a badly-designed, non-modular system, designers frequently find it easier and more cost-effective to simply junk the design and to start from scratch.

Perhaps, this is what we should do with globalization.

[From Chapter 22, Towards a Political Economy of Information by Roberto Verzola]