Ensemble programing (aka mob programming) is an expansion of pair programming to include an entire team. More information can be found at mobprogramming.org
In this text I will try to explain why this is so awesome by talking about processing units in a computer.
Why would you use more than one processing unit in a computer?
I will use the answers to this question to show some of the things I like with ensemble programming.
Processing units have limitations, but if the code is written in a way that let them collaborate, you can let them join forces. Threading will also allow a process to go do something else, without the rest being blocked. The same way that computations are distributed in a GPU, cognitive load can be distributed in an ensemble. Also — if you need to look something up, one person can “spawn” and consult their laptop, returning with more knowledge when it is their turn to navigate. The ensemble can solve another part of the task at hand during that time, not being blocked.
Having both a CPU and a GPU in a computer is standard today. They are good at different things, because they work differently, but need to collaborate. In an ensemble you can bring a differentiated group of people together, and thus solve problems better.
When put in an airplane, or voting machine, a computer needs to have protection against bit-flips. (Radio Lab has a nice piece on it here) Basically you let two, or more, systems perform the same task and that way, you can see if one of them has been influenced by cosmic rays. People make mistakes without cosmic rays, so multiple people validating what is happening in the code is a good thing.
Having a backup system is always nice. For software today there can be an orchestrated cluster, that is making sure that there are always “computers” available serving the customers, even if one, or more, instances are down. Coding in an ensemble is tiring, since there is so much action. But it is ok to take a break. And to be home sick or take vacation is not such a threat to the productivity of the team as it might be otherwise. Both leaving the ensemble for a shorter time, or a longer, will be fine, since the structured collaboration transfer knowledge.
So, this is my try to explain some benefits of ensemble programming with hardware metaphors. Hope it helped.