Pivotal Decisions, Process, Competition, and Success

The Japanese ate our lunch in the automobile industry. Their cars were cheaper, more efficient, longer lasting, and, in the opinion of many, of much higher quality that American cars. Industry experts credited Japan’s rebuilt industrial base after World War II, but this theory does not explain the billions spent in creating new plants during the expansion in the U.S. during those same years.

Many experts now credit Japan’s relentless application of just-in-time (JIT) manufacturing techniques and total quality management (TQM) or agile manufacturing to the automobile industry as opposed to the Fredrick Taylor models of lean manufacturing practiced in the U.S.

This shift represented a titanic change in processes, procedures and management techniques.

Currently, the software manufacturing industry finds itself in a similar situation. The hallmarks of most software projects include chronic lateness, over-extended budgets, and poor quality.

Software organizations struggle to reign in projects by imposing stricter software processes. These processes are based on waterfall or iterative models with phasist structures stemming from Taylorist theories of efficiency.

Over the past decade new software processes based on JIT manufacturing principles called “agile” methodologies have been introduced into the software industry.

However, there is huge reluctance in the software industry to make any adjustments even though, currently, all indicators point to something egregiously wrong.

This situation in many ways resembles the turning point of the U.S. auto industry from the ’70s and early ’80s.

Stability of Processes

Humans successfully control many complex systems under unpredictable and changing conditions. Airplanes don’t crash into the ground even when buffeted by gusts of wind, and power stations do not melt down under fluctuation’s in power draw.

These complex systems are controlled by making measurements and corrections to keep the system in balance. The study of the systematic application of measures and corrections is called ‘control theory’.

The control of a system depends not only the system’s current state but also how the system will respond to corrections or inputs. Control theory defines three categories of stability:

Stable: Stable systems resist change. When changes are made to a stable system, the system eventually returns to its starting state.

Neutral: Neutral systems respond to inputs in predictable ways.

Unstable or non-linear: Complex systems often respond to changes in unpredictable ways. In the real world, most complex systems are non-linear.

Many complex systems display stable characteristics when their elements are kept within certain parameters, called an “envelope of control.” However, if the threshold is exceeded unpredictable results may happen.

Software Process and Control

Automobile and passenger aircraft stability are desirable features. However, there are many instances where the desire of a system to return to its stasis point is detrimental.

Fighter aircraft, for example, must be able to maneuver quickly to avoid other aircraft or incoming anti-aircraft artillery. Any attempt by the aircraft to return to its stable position, would slow its reflexes.

Traditional software engineer processes such as the waterfall model and iterative model are built on Taylor’s theories of lean management. These processes are developed on two fundamental assumptions: First, that each stage of the waterfall is progressively more expensive (from specification through implementation) and second, that the process itself is dynamically stable.

These processes as a group are called “phasist.”

The assumption of progressively increasing costs leads to the practice of attempting to fully define requirements and design before beginning implementation. Since changes to the requirements after implementation begins are expensive, system control becomes an exercise in managing change.

The stability assumption implies that Gant-style planning tools optimally allocate resources. Gant charts allow resources to be aligned and allocated based on estimated cost through the process of leveling.

This process depends on responding linearly to changes in resources, requirements and costs, in other words, the system must be stable or neutral.