Sunday, April 27, 2014

Diagrams of Effects

Diagrams of Effects were first introduced in the famous four-volume series: Quality Software Management by Gerald Weinberg. It is a great enabler when trying to understand the dynamics of a system exhibiting non-linear behavior, very similar to software development team systems.

Diagrams of Effects are similar to Causal Loop Diagrams (CLD), but it is slightly different in notation and is more powerful in modeling human interventions in the system. A diagram of effects consists primarily of nodes and arrows. Each node corresponds to a measurable quantity. Easy arrow corresponds to an effect (whether positive or negative) which the source node exhibit on the target node. This is a description of the diagram elements:

Element
Notation
Description
Node
A measured quantity. It can be actual measurement, or deduced from observation or by experience
Cloud Node
A measurable quantity, although actual measurement may not be done. Or, it may represent a conceptual measurement (like stress, pressure, etc.) which may be too expensive to measure, or just not worth the trouble.
Natural Positive Effect
If A moves in one direction, B moves in the same direction. This effect is natural (without human intervention)
Natural Negative Effect

If A moves in one direction, B moves in the opposite direction. This effect is natural (without human intervention)
Positive Human Intervention
Indicates a human intervention which makes the affected measurement move in the same direction as the movement of the cause.
Negative Human Intervention
Indicates a human intervention which makes the affected measurement move in the opposite direction as the movement of the cause.
Human intervention with open choice of Effect
Indicates a human intervention which makes the affected measurement move either in the same direction or the opposite direction, depending on the intervention.

Reinforcing & Balancing Loops:

What is interesting about Diagrams of Effects is that they reveal Reinforcing loops and Balancing loops. Reinforcing loops are cycles of effects which reinforce each other and may drive the system to failure. In the following example, more bugs lead to higher levels of stress which leads to more bugs. Also, it works in the other way as well, less bugs leads to less stress which leads to less bugs:


Another type of feedback loops is the Balancing loop, in which one effect balances another. In the following example, in case bugs increase, team exerts more effort in code review which leads to less bugs, which balances the effect of increasing bugs:
Such dynamic is not possible to be studied using  2-dimentional graphs. This is why Diagrams of Effects is an excellent tool for analyzing complex systems.