The chief programmer team is a hierarchical organizational structure for facilitating software development. It was first defined and used by IBM in the early 1970s, and various permutations of the idea have been popular ever since. The structure of many development teams is based, at least in part, on the chief programmer team paradigm.
In the most purely abstract model, at the top of the team pyramid is the chief programmer, one person who ideally is an extroverted, assertive hacker extraordinaire. As the name of the position would imply, the chief programmer is the head honcho, responsible for making all design and implementation decisions. In addition to single-handedly designing all programs, he or she supervises the rest of the team, and assigns development tasks to individual team members. The chief programmer is also the endpoint for all team communications. Team members may communicate among themselves regarding the project, but only when the chief programmer deems this to be necessary. He or she may ask for input or feedback from the rest of the team, but all power ultimately rests with the chief programmer alone. In theory, the chief programmer answers only to the customer and God.
The rest of the team exists solely to support the chief programmer. Usually, there is an assistant chief programmer who serves as a sort of understudy, substituting for the chief programmer when necessary. The amount of power that the chief shares with the assistant is, unsurprisingly, left to the chief programmer's discretion. Under the assistant chief programmer are various support staff. The senior programmers are responsible for actually implementing the chief programmer's design. If the organization is large, there may be junior programmers as well, who are generally assigned tedious coding tasks that are not interesting or important enough to occupy the senior programmers' time. There is minimally one tester, and optimally a testing team, that is responsible for rigorously testing the code produced by the programmers using well-defined software testing techniques. A team librarian maintains all documentation relevant to the team's projects. Depending on the size of the team, there may be additional team positions. For example, there may be a toolsmith who develops software tools for internal use. There may also be an administrator who assumes the burden of tracking the project schedule and cost.
There are several advantages to using a chief programmer team. According to its advocates, a chief programmer team is roughly ten times more productive than a development team based on another structure. It simplifies communication issues, because all questions and concerns are directed at the chief programmer, rather than having the team members attempt to work out the problem themselves. Ostensibly, the chief programmer team eliminates the need for peer code review because the chief programmer is responsible for reviewing all code. Since all major decisions are made by one person, the decision-making process tends to be swift.
There are also many disadvantages to the chief programmer team, which ironically stem from the same source of the advantages: all power and responsibility is consolidated into one position. The chief programmer is a software engineer and project manager rolled into one, and it is difficult to find someone who possesses both the technical expertise and the interpersonal skills required for the job. The chief programmer is also a human being. Like all human beings, he or she is subject to stress, illness, and mistakes in judgment, but the model does not adequately account for all of these factors. In short, the chief programmer must be a superhuman dynamo, and such individuals are in short supply.
Despite the popularity of the idea, it is extremely rare to find a true chief programmer team in the industry (even though the majority of software companies claim to have a chief programmer). Most companies are of the opinion that the risks attendant to creating a chief programmer team as defined above outweigh the possible benefits. Luckily, there are many alternatives. This particular organizational model represents an extreme on the software engineering spectrum (at the other end of the spectrum is the idea of egoless programming), and most development teams fall somewhere in the middle.