Does generalising specialist mean you can't be the best?
Date: 2008-08-11 05:31:55

It's often said that people who are really good at what they do are so good at it because they have narrowed their focus in their area of specialty until they are only doing the thing that they are good at.

To use a football analogy, Manchester United's Cristiano Ronaldo - widely acknowledged as the best footballer in the world at the moment - is absolutely brilliant when he has the ball at his feet, taking on defenders, getting in shots around the opposition penalty area. So that is what he does all the time. The rest of the team are happy to do his running off the ball and defensive work because they know how good he is at his specialty.

One of the key concepts when working as an Agile Software Developer is that of being a http://www.agilemodeling.com/essays/generalizingSpecialists.htm[Generalising Specialist]. The idea here is that you would have a specialism in one area but also general skills across several others. For example you might have strong Java skills but also the ability to do some DBA work, a bit of build work etc.  This should not be done to such an extent that you become a  http://en.wikipedia.org/wiki/Jack_of_all_trades,_master_of_none[jack of all trades master of none].

One area where I wonder if this can also be applied is knowledge of different programming languages. Taking myself as an example, I have worked in software for almost three years now. During that time I have worked approximately half the time in Java and the other half in C#.

I enjoy the challenges each provide, but I often wonder whether it would be better for me as an individual to just focus on one language. Although Martin Fowler suggests that http://martinfowler.com/bliki/PreferDesignSkills.html[design skills are more important than specific language ability], even http://www.thoughtworks.com/work-for-us/jobs/All-Job-Openings.html[ThoughtWorks job descriptions] are looking for a specific language skill-set. Now clearly in my case there is not a massive difference between Java and C# so the skills are completely transferrable.

I would also be limiting the range of projects that I am able to do were I to restrict my focus. However, I would end up being better at the language I chose to pursue instead of splitting my efforts.

Since languages are always changing and new ones becoming popular it makes me think that a language focus would be considered too narrow an area of specialisation.

It would be very difficult to work in an agile team if you only focused on your speciality. Some degree of skill in other areas is necessary. This week I've been focused on setting up the build for the project I'm working on, and despite the fact that I will never be as good as the likes of http://www.chris-read.net/[Chris Read] or http://www.juliansimpson.org/[Julian Simpson] in this area, I was able to do it.

To refer back to the idea of the Generalising Specialist. I think it is important to have people on the team who have software development skills beyond just their specialism, but to get the best out of them it would seem obvious that they should spend as much time as possible doing things that they are good at.

When you're working as a Generalising Specialist, it's not in the interests of being the 'best' as an individual, but more about being part of a team which is greater than the sum of its parts.