Apologies in advance to any war veterans.
What have the tactics of jungle warfare got to do with Agile/Lean methodologies, such as XP and Scrum? Gurrillas fighting in the jungle often had to tackle large patrols of foreign troops who outnumbered them. In some wars, the gurrillas apparently did this very successfully. How did they do it?
Their tactics were to attack the head of the patrol and then immediately drop off. The head of the patrol would then give chase to them. When they had successfully separated the head of the patrol from the rest of the patrol, they would turn around and fight. In this situation the gurrillas now outnumbered the opponent on hand, and they were able to overwhelm their limited numbers easily.
Once they had successfully executed this tactic, they would repeat the same process, in theory until the entire foreign patrol was eliminated.
So to summarize, to fight effectively, you have to reduce the batch size of the opponent at hand, and iteratively tackle each batch until the job is done - sound a bit like lean/agile, doesn't it.
Now here comes the interesting bit: Why is batch size so important?
It turn out that if you have a numerical advantage, the advantage is a better-than-linear function. Because as the large team reduces the size of the smaller team, the smaller team becomes progressively less dangerous. Myself and a colleague were discussing this the other day, and we decided we would work out what the advantage would be using a simple simulation.
Assume you have a group (a) of gurrillas shooting at a group (b) of 25. Suppose also that per unit time, each person has a 0.1 probability of killing someone on the other team. The decay in the size of the two teams can be crudely plotted as follows :-
b a
b a
b a
b a
b a
b a
At the top of the plot, he size of group (b) starts off at half the size of group (a). Group (b)'s size drops off at a rate that approximates a linear function.
In contrast, the size of group (a) starts decaying at half that of group (b). And then rate of decay starts to back off very quickly. At the end, when group (b) has been completely eliminated, the size of group (a) is 42.
In this idealized simulation, for a loss of less than 16%, a force half your size is eliminated. Do this repeatedly, and the batches will accumulate and you will have eliminated a numerically superior force.
The simulation code (in Smalltalk, 'cause thats installed on my computer), with a simplification in the modeling of probability is as follows:
| a b a0 b0 string |
a := 50.
b := 25.
[
string := ' ' copy.
string at: a asInteger put: $a.
string at: b asInteger put: $b.
Transcript cr; show: string.
a0 := a.
b0 := b.
a := a0 - (b0 *0.1).
b := b0 - (a0 * 0.1).
(a asInteger > 0) & (b asInteger > 0)
] whileTrue.
The next question is this:
So back to software development. If I have a team of 10 that needs to complete 10 stories in an iteration, is it better for the team to tackle all 10 stories at the same time. Or is it better for that team to take 5 stories and do those first, before finishing off the last 5 stories?
Im sure with a bit more thought we could simulate the dynamics of the kind of problem solving that occurs when we do software development and get an objective answer to this question. The simulations would be making assumption, but at least these assumptions could be stated up front.
Although we didn't build a model, both myself and my colleague agreed that we could make the mental jump from tactics of jungle warfare to the tactics of deploying a programming team. We also agreed that we were able to make the jump because of this kind of simulation is far more compelling than the conventional explanations we had been offered in the past.