Saturday, October 13, 2007

Nerd.pngA while back a saw a talk by someone with a name I can't remember talking about avoiding specialists. This got stuck in my mind and I have been trying to use this way of thinking in the team I work in. The idea is that having specialists is a risky business for the company. This is related to "the bus effect". What happens if the specialist (the guru) gets hit by the bus? All the places that I've worked we’ve always had them. Come to think of it, I've been one and so have probably you. This is also running in the vanes of developers. It’s much easier to do changes to your own code, that letting someone else do it.

So what can we do to address this problem? One suggestion is to have general specialists instead of pure specialists. So what does that mean? First an example of a specialist. A specialist is someone who is very good, or has a lot of knowledge within one specific area. For instance the guy that developed the framework that your application runs on. Every time there is a problem with that framework, he's the guy that has to fix it. You've tried several times to get access, but you're always told to hand it over to the specialist.

A general specialist however has divided and shared his knowledge over several areas. The most important thing here is the sharing of knowledge. It's now not only one guy that knows that specific thing within your app. I'm referring to larger bits of the app, and not small little bits, because you can't have everybody know every little thing in your system.

So how do you achieve this within your organization? To use our team as an example, we ran into a challenge when we were going to divide our Scrum team in two. We became too many in one team and were forced to split us up. In the app we're developing there was very clear layers of functionality, so the first thought was to divide the team by client and server. The advantage of doing this was that you would get extra focus on e.g. web services, business logic and database. You would also get another sense of ownership that might improve quality of the product. However, this also has a few negative effects. For instance, if you’re doing feature based development (like we do with Scrum) the client developer needs to hand over his work when he needs a new web service or some business logic. This will result in a dependency that is unwanted, and fits very poorly with Scrum.

So we decided that it's better to allow the developer to work on a single feature all the way through the layers. But will not this result in this person being the specialist on that feature. Yes, and that’s where sharing knowledge is important. Let’s say a bug is found on that feature. Who’s going to fix it? Maybe someone else than the guy who created it. Or if this feature is going to be improved, someone else might do that job. This also fit nicely with Scrum’s philosophy about choosing your own tasks and not being constrained by your knowhow within a specific area.

Trying to think of general specialist’s will help you share risk across your organization. On short term this will have an extra cost, but the company (and you) will see this investment worthwhile the next time someone quit their job or for some other reason leaves the company.

Monday, October 15, 2007 8:17:13 AM (W. Europe Standard Time, UTC+01:00)
I have kind of a different take on this... The problem with specialists is strongest when you have a small team. But as you grow you need more and more specialization - or else you will not improve and be able to utilize the number of team members. If you have 15 developers, and three of them are database specialists, that is not a big problem.., if one is hit by the buss the other two still comes to work in the morning :) If you have 100 developers and five of them is a specialist on the application specific messenger system, that's the same, no problem.

So I think this has more to do with scaling. If you have a single developer he has to know everything, but if you have two developers they can't split the knowledge in two.., and that's basically what you are saying.., like a great football team (Brann) you need good backup on all positions.

But as you grow as a team I feel it's might be a mistake not to split knowledge on the architectural layers. Nobody can be an expert of everything, and I feel that a feature will be implemented best by a UI designer, communications expert, domain model expert and database expert working as a team than a single developer having to know everything.

Sharing knowledge should be a given, but sadly we have no good culture for doing this in Norway at least - too little focus is given to it by everyone, including management and the developers themselves.

The only point speaking against specialists in my opinion is the need to know the whole in order to come up with the right design decisions. In my world that is where the architect comes into play, but in a strict agile environment you're not supposed to have that, are you?!
All comments require the approval of the site owner before being displayed.
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, b, blockquote@cite, em, i, strike, strong, sub, sup, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Live Comment Preview