There has been an interesting thread going on in the Extreme Programming Yahoo group. I haven’t read the whole thing, but I’ve cherry picked out some good posts from the list.
Steve Gordon posted one that I find particularly interesting. He posits:
I am finding that the most productive pairings are when the knowledge of the more junior developer is not a proper subset of the knowledge of the more senior developer, but complements it in some way. For example, when the junior developer is more familiar with a new domain or a new technology, the senior developer may still dominate the design, but the junior developer can make a contribution, which then creates a true partnership that allows each of them to learn from the other. The junior then picks up the more general development and design skills.
Therefore, when starting a new project, I would recommend selecting senior developers based on general skills rather than knowledge of the specific domain or technologies and selecting junior developers based on knowledge the specific domain or technology (as well as growth potential, of course). This recommendation is the exact opposite of what most people do.
I find this advice very interesting, and as he says, completely contradictory to what most projects do.
While I’ve always believed that knowledge of a specific technology is important, knowledge of how to build software is even more important. And this knowledge is much harder to find. But its the engine that makes projects go.
I’m not running down technology knowledge at all, as I know that’s critical for a project’s success — I just believe it is a lot easier to find someone well versed in J2EE or ASP.Net, for example, than it is to get someone who understands the tradeoffs that have to be made when designing and implementing a system. And someone who can gently mentor someone into being a more senior developer.
This fits in well with the profile of an expert agile developer as being someone who is really, really good at a lot of tasks, but perhaps not expert at any of them. What they have developed is the ability to pick up new technical topics as needed, very quickly. But they can always apply their software knowledge to any task, integrating the pieces into a coherent whole.
Companies would do a lot better to hire a bunch of these expert generalists and subsidize them with a sprinkling of young bucks, to bring the new tech expertise and to be groomed as the next generation of experts.
UPDATED — to fix formatting under IE. It read just fine in BlogJet before posting, and it reads just fine in Firefox, but IE runs the quoted stuff all into one line. Readjusted the BlogJet-produced HTML to make it flow properly. Thanks for the comment, Mark