Industry pundits have taken to calling the process of software design "system architecture." They borrow, of course, from the ancient and time honored tradition of construction. The notion is that computer programming is like building a building. An architect dictates the design. Lesser construction workers follow the instructions given by the architect and build the building. A lower class of maintenance workers maintains the work after construction.
The construction industry has a nice clean political hierarchy. End users, maintenance workers are at the bottom. The dredges who actually build the building (carpenters, brick layers, et al) are part of a middle class that receives a measured amount of blue collar respect. Supervisors and project managers dance around at the feet of power. At the top of the pinnacle stands the architect.
An architect does not sully fingers by touching materials. An architect works at the highest levels of abstractions. An architect flutters among the clouds at the meta level. An architect considers form, structural integrity and aesthetic appeal of a construction. An architect is a true philosopher kings in the Platonic sense.
The allure of the architectural model is the political structure. The political architectural model fits comfortably within the great chain of being. The cogs in the machine all have their nice defined places in the greater glory of the computer industry.
Now, I must confess, the overall goal of my software career has been to become one of these legendary system architects—to be among those who stands at the top of the pinnacle dictating to the world the proper structure of machines and businesses (in my career fantasy, my underlings just happen to adore me). However, I have a nasty habit of paying more attention to what works than in pursuing political dreams. Although the title of System Architect would sooth my ego, I doubt that it is the best metaphor for system design.
My experience is that the best programs aren't designed. They evolve. The ideas behind great programs often start as pure, unadulterated, unstructured human insights. The implementation of the programs evolve through interaction between the creaters and users. As such, the most effective structures are not the product of a single architect, but develop from the interaction and contributions of all the people involved in the project.
The actual natural process of human creation involves extremely complex connections between people and groups. The hierarchical structure of the architectural model is simply too rigid to induce sustained creative development.
I find system design to be more of an organic process than a mechanical or political process. It seems to me that we would do better to adopt organic metaphors to describe the process.
When constructing a building, you get one shot at laying the foundation. In most computer systems, you use an iterative approach to development. The programmers continue to add enhancements and modifications after the first release. The system evolves.
Conversely, the cascading development cycle does not work in construction. A cascading skyscraper means a pile of rubble.
I also realized that the hierarchical organization chart, with almighty architect at the top of the pyramid, is in direct conflict with my belief that goal of the programmer is to disseminate information. The pyramid structure of a hierarchy focuses the information in the system up the pyramid. Yes, this creates a nice power base for one individual, but the information is more valuable to a company when it disseminated through the whole structure.
I believe that programmers can find better ways to describe their work with organic metaphors. I have read many exciting works on life cycle analysis, and evolution of programs.
As I look at what I actually do in my cramped little cubicle, I realize that my work is more akin to farming than construction. I spend my days cultivating information, and growing a program. I can see the evolution of my work as it needs to scale through different platforms.
Often I will find myself carefully grafting a segment of code from one program to another. I might graft a reporting tool from the telephone system to the financial system. When I successfully write a program that helps the other people in the company communicate information, then my work bears fruit.
I watch in sadness as the system architects disappear into their chambers in the clouds. They speak of the mounds of code before me as if they had designed and controlled its birth. Yet, as I look at the large mounds of information within the system, I realize that I am not looking at the steel girders of a designed skyscraper reaching toward the heavens. I realize that I am looking at a living thing--a large biological mass anchored within the earth. The architects in the clouds do little more than jabber and wave hands. I wonder if this biomass would turn into a tree, or simple into a mound of manure waiting for one with the skills to cultivate its values.
Systems grow and evolve. Often programs die, or succumb to disease. Yet, at the same time, I can feel the pulse of life as information permeates through the network. I no longer seek to claim to be a builder, but one who plants seeds and cultivates the soil. The biological metaphor may sound humble when contrasted to the titles of architect or engineer, yet for a system to bear fruit, it will take cultivation.
I must now get back to what I do best, and work in a deep rich layer of organic fertilizer into the soil.
descmath, plusroot, search, rgreetings, sponsors