May 29, 2007

...Learn TDD with Codemanship

Is The Agile Community A Clique?

A few of us here in the UK who know Rachel Davies were taken by surprise to learn that she's stepped down as chair of the Agile Alliance. Brain Marick is apparantly now filling her shoes until proper board elections are held later this year. He's been posting willy-nilly on the Agile Software Development Forum looking for input on how the AA can be "fixed". This is very interesting for me; not only because it suggests more widespread agreement that "Agile is broken" than maybe some of us thought, but also because there hasn't been a mad rush to make proposals, which you'd expect there to be with a subject this important. Some well-known Agilistas are conspicuous by their absence in the discussions.

I'm not going to post to the forum, since I don't believe Agile needs fixing. But I will offer a possible explanation of what has gone wrong with the Agile movement. Right now, I'm getting my head around the new-ish science of social networks and network analysis. Researchers have suggested many metrics that could be used to help us understand these networks. One such metric is actually very closely related to a software metric that I've been known to use - relational cohesion.



Imagine a network of bloggers, for example. Each blog has a list of links to other blogs that the author reads. In turn, each of those blogs might list other blogs, and even point back to the referring blog, creating bi-directional relationships between some of them. This network of blogs resembles very much a network of classes in a software system, each with relationships to other classes forming a network of modules and dependencies. According to Robert Martin, classes that change together belong together, so we should seek to package clusters of highly connected classes in the same units of release and reuse. Package cohesion can be easily measured by dividing the number of actual connections between classes in the same package by the number of possible connections that could exist between all those classes. In a totally cohesive package, every class would be connected to every other class.

And when we make changes to a class in that package, we desire to minimise the extent to which those changes "ripple out" to classes outside the package, which would mean more packages that would require re-testing and re-deploying. To this end, we seek to minimise the connections to classes outside of the package. Ideally, we want packages that are highly cohesive and loosely coupled.

But, while these properties may be very desirable in software designs, they might not be so desirable in social or professional networks. A highly connected (cohesive) cluster of people, with minimal connections outside of that group, is commonly referred to - and this really is the scientific term, the books tell me - a clique.

The problem with cliques is that most of the message passing - which requires conections between nodes in the network to take place - happens inside the clique. Far less information leaves or enters the group, leaving them relatively cut off from the outside world, and the outside world relatively unaware of what goes on inside the clique. So someone inside the clique might, just off the top of my head, hear lots of discussion about Ruby On Rails, while people outside the group might be blissfully unaware of it. This can create the perception for someone inside the clique that Ruby On Rails is a much bigger deal than it really is, since - in their close-knit world, at least - it's the thing that "everybody" is talking about. Outside the clique it's little more
than background noise, with the Java, .NET, SOA and AJAX juggernauts all but drowning it out.

Another way of describing a highly cohesive, loosely coupled network-within-a-network is isolated. Specifically, if we imagine that the clique is a lake, and the flow of information is the flow of water in and out of the lake, then we have not much in the way of fresh water and nutrients finding their way into the lake. It stagnates and eventually dies, with fewer and fewer new ideas to feed the interest and enthusiasm of group members. It's a relatively closed system, and we know what happens to them...

Anyway, I've spent 30 minutes this morning navigating my way through the blog rolls of the Agile community, and I suspect we may have a network that might be cohesive and loosely coupled enough to be correctly labeled a clique. If I were Brian, I would take some of the Agile Alliance's alledged cash surplus and pay someone to research this properly. If, indeed, the Agile movement turns out to be a clique, he can then ask about how it might be opened up to the much wider software development community.
Posted 13 years, 6 months ago on May 29, 2007