As a manager in an Agile organization this issue interests me because I want my Agile teams to perform well, which means that I need to staff them so that they are set up for success. I also need to provide career guidance to people, and the choice of being a generalist versus a specialist is pertinent to the conversation.
My personal opinion on this subject can be summarized as follows:
- You need both specialists and generalists in your organization, with a need for more generalists than specialists.
- Specialization versus generalization is a career choice.
- People need to avoid over-specialization.
For example, I can design a user interface and I can appreciate the need for a great user experience, but I’m definitely NOT a user interface designer. The same goes for database design; I understand what a relational database is all about and I understand normalization, but I would never classify myself as an expert in database design because I don’t specialize in it.
Good generalists can perform many of the activities of specialists, but at best you will end up with something that is “good enough,” but not great. And that's the best-case scenario. Things can go bad. Like user interfaces that seem like they are deliberately designed to frustrate and discourage use of your software.
When it comes to staffing an Agile organization, my opinion is that specialists should be a definite minority relative to the generalists. Specialists should be shared resources, be utilized by Agile teams comprised of generalists in one of two ways:
- Temporarily assignment to a team when the team has identified a specific need for that expertise. The specialist’s role would be to perform work that the team lacks the ability to perform. The team should optimize the specialist’s time – and reduce the total time required of the specialist – by preparing in advance by creating UI prototypes or a preliminary database design, for example.
- Consultation to a team without performing any work. The objective in this case is to advise and guide the generalists, sharing insight and helping the generalists implement a better, more polished solution than possible without that guidance. Again, teams should prepare in advance to optimize the value received from the specialists, and to be as crystal-clear as possible about the advice that they are seeking.
- Has one or more technical specialties (e.g. Java programming, Project Management, Database Administration, ...).
- Has at least a general knowledge of software development.
- Has at least a general knowledge of the business domain in which they work.
- Actively seeks to gain new skills in both their existing specialties as well as in other areas, including both technical and domain areas.
I'm definitely supportive of Scott's point, "actively seeks to gain new skills..." Over a period of years, any good professional should seek to round out his or her skills; being a generalizing specialist should not be a stagnate existence. Professional growth is important if you expect your salary to continue to grow, and the added versatility gives you the advantage of greater marketability.
Career guidance ultimately comes down to the individual:
- What does the individual enjoy?
- What are their strengths and preferences?