An approach to software development that mirrors the process used to conduct surgery. Discussed in Fred Brooks' MythicalManMonth
The hard/complex work is done by the lead surgeon - he's in charge and it's his responsibility if the patient dies. On the other hand, in the theatre the surgeon's word is law. There's him, then there's God.
The surgeon is backed up by another slightly more junior but still skilled, surgeon. (Brooks calls them co-pilots). This person is there for several reasons. One is backup - if the surgeon can't go on, the second surgeon can at least finish things and keep the patient alive.
Secondly, they're there to help in those parts of the operation that need four hands to do. (Or in software terms a TwoBrainProblem
Thirdly they gain experience. The medical world doesn't let you start leading brain surgery until you've been second seat on several similar surgeries. Interestingly, this means that the lead surgeon on one operation could also be the backup on another one in a field they have less experience in - what counts is the amount of experience in this particular type of surgery, not experience in total.
There are also a number of other people around who have clearly defined and important roles: an anaesthetist to keep the patient alive - it's not practical for the surgeon to be making the constant adjustments to anaesthesia equipment for example. O.R. nurses to make sure equipment is where it's needed when it's needed and to perform minor surgical procedures - it's not unusual for even more junior surgeons to be in there just to watch and to, say, practice skills by starting the surgery or closing the patient afterwards. It's assumed the lead surgeon doesn't need to practice sewing any more.
In software terms, this means you have a lead who runs the project, makes the critical decisions and to BeInCharge?
. A co-lead is present as a hedge against the loss of the lead (see TruckNumber
) and who is there to help with design but not control. The rest of the teams role is, in essence, to let him (or her!) do that job. The junior developers are involved in the process - so they can see how analysis becomes design becomes code, but the complex code will be written by the lead. There will be other specialists - tool builders, technical authors and so on to remove workload from the lead and allow them to concentrate on the major problem at hand.
See also ChiefProgrammerTeam