Agile Software Management Accounting for Systems
- A General System
- Detail Complexity Versus Systems Complexity
- Throughput Accounting for General Systems
- A System of Software Development
- A More Complex Software Development System
- The System Goal
- Financial Metrics for General Business Systems
- Financial Metrics for Software Development Systems
- Predicting the Future
- Framing the Problem
- Understanding Software Production in the Value Chain
- Throughput Accounting Versus Cost Accounting
- Summary
"Tell me how you will measure me and I will tell you how I will behave."
—Eli Goldratt [1990b]
Suspend for a moment everything you have already learned about software development lifecycles. Ignore concepts of sequential processes, iterative processes, spiral processes, and their like, and consider the stages of the transformation of an idea into tangible working code.
A General System
Figure 2-1 shows a generic simple single loop system. The system receives an input. It performs some operation on the input. The result is compared with some expected result, and an output and feedback are generated. The feedback is reintroduced mixed with the input to the system, and the operation is performed again.
Figure 2-1. A general system.
There are a number of known properties in general systems. All systems are nonlinear. This means that there is no linear relationship between the effort (or energy) expended in the operation of the system and either the input or the output. The nonlinearity is introduced by the feedback loop. All complex adaptive (or closed-loop) systems have feedback loops.
However, the input is usually proportional to the output. The output is derived from a combination of input. For example, four wheels (input) are required for one car (output). Four wheels are always required. It is never five or three or any other number. Hence, the relationship between input and output is both linear and predictable.
The output is predictable because all systems exhibit adaptive behavior. The adaptive behavior is designed into the system. The system is intended to produce an output that is predictable. If the output is not as predicted, the adaptive behavior is described as undesirable behavior. The feedback loop is intended to control the undesirable behavior and correct the system so that the desired adaptive behavior results.
When a system settles down and produces the desired adaptive behavior, it is said to be "convergent," "stable," and "under control." When a system does not settle to the desired adaptive behavior, it can be described as "divergent," "unstable," "out of control," or "chaotic."
General systems can be described using the language of emergence by saying that a system is designed with a set of governing rules that determine the desired adaptive behavior.1 These rules are generally simple in nature, but result in complex and occasionally unexpected adaptive behavior. The operation of the system produces a number of artifacts, by-products, or internally observable behavior. These are known as emergent properties.
Thinking with Systems Is Hard
The human mind is not naturally programmed to think in systems. It does not naturally think nonlinearly. From an early age, we learn to think in simple terms of cause and effect and to speak in a language rooted in linear cause-effect concepts. In addition, we expect the effect to happen immediately after the cause, so that they can be easily associated.
I experience this cause-effect learning first hand with my daughter, who at the time of writing this chapter is a mere seven months old. She is just learning cause-effect relationships. She has discovered that if she throws a toy from her high chair, then Dad will pick it up and give it back to her. He will also talk to her and generally entertain her. From her point of view, she throws the toy (the cause) and Dad shows her immediate attention (the effect). The effect is gratifying to her (feedback), and she throws the toy again. In Systems Thinking, this is known as a reinforcing loop [O'Connor 1997, p. 40]. She can associate the cause with the effect because the time delay is negligible.
What my 7-month-old daughter is too young to understand is the balancing loop, that is, the hidden effect of her action. The balancing loop is that Dad gradually becomes bored with this game—with each iteration his desire to continue decreases. Eventually, he doesn't pick up the toy but passes her another toy. A new game of throw and pick up begins. This time the game lasts for a shorter number of iterations before Dad refuses to pick up the toy and instead gives her another one. A third game begins, but it soon ends when Dad no longer wants to play. There are chores to be done or a book to be written.
In Systems Thinking, this effect is known as a balancing loop. At first, Dad has fun playing the game, but gradually his level of annoyance grows until he doesn't want to play any more. The annoyance is a balancing loop. Due to the obscure nature of the feedback loop and the time delay between the beginning of the game and the balancing effect kicking in, my daughter has no concept of why or how the game came to an end.
Systems Thinking is complex! Cause-effect thinking is simple—even a 7-month-old can do it! Systems Thinking must be taught rather than learned naturally. Humans are not programmed to easily comprehend effects that are delayed from, or several derivates from, their original cause.