The concept of collective code ownership originated with Extreme Programming in the nineties. It is seen as part of the very fabric of Agile. The idea that anyone on a team can change a component, a method or a class is appealing for methodologists because the model is simple. It is appealing for developers since change can happen at any time and the team operate at peak velocity. It is appealing to managers for the same reasons.
But I have to admit I am finding it hard to encourage people to do it here. There is little argument about the concept – everyone seems happy with that – it’s the putting it into practice that’s proving really difficult.
The problem, you see, is that not all developers are alike. Not everyone we hire is an expert in all of the technologies we use. There are people on every team who are better C# developers than the rest, others that know our loops better than others, some are better at SQL, some at CSS and so forth. So the project managers and team leaders are, quite rightly, utilising this spread of expertise by allocating people to work where they will be exercising their skills, talents and interests.
Of course there is never exactly the right skills to meet the technological demands of every single project, so some people are forced to do something they are not entirely comfortable with. But… that’s how learning happens.
For the foreseeable future, there will always be the need for specialists, especially in companies that have any sort of bespoke software and/or are rapidly growing. We have, for example, introduced the role of “Technical Owners” whose job it is to ensure that the architectural integrity of their part of the platform is maintained. They are specialists and in demand. Any ‘bad’ code is usually introduced by the generalists who don’t understand enough about the platform.
Collective code ownership is a great concept, and I don’t think we should abandon the principle. Ensuring 100% unit and integration test coverage is still a good thing – a very good thing! But plug-and-play developers? If they exist, there are way too few of them.