The most productive developer on a team is usually the one with the most knowledge of the system. Of the code, the business domain, the other software this code interacts with, and the people in the organization who can help.
How did they get that knowledge? By working on the system.
Weinberg remarks that when a manager has some important work to assign, “the first place they tend to look is to the people who have the most knowledge of the system.” The people with knowledge are the most capable of doing the work, so they get the important work.
It is a property of software development that learning the system and changing the system are the same activity. Doing that important work develops important knowledge.
This is a reinforcing feedback loop.
Once this cycle gets started, the 10x developer phenomenon emerges. Weinberg: “whoever gets the first few assignments becomes the expert to the the exclusion of others.”
What can we do about this? We can deliberately spread knowledge among the team.
Weinberg (in 1992) suggests that managers assign work to the person least busy, instead of the person with the most knowledge, with training as part of the purpose.
Now (almost 2021) we have work techniques like pairing and ensemble programming (this is a nicer name for “mob programming”). Doing work together, we get the speed boost from everyone’s knowledge and the knowledge boost for everyone.