Conway’s Law – Once Again

When I first heard of Conway’s law, I though it was a geek joke.  After years of seeing it play out again and again, I’m realizing that it actually communicates a deep truth about how the world works.

Conway’s law (in my words):
Any organization that creates something is doomed/destined to create something that is a mirror image of its own organizational structure.

I’m doing some consulting work for a small organization that is spread out over two continents.  Two continents, about 10 computers, and probably no official full time employees.  The fellow who runs it does so out of love, and he hires people to handle issues as they come up.  There have to be at least 4 or 5 technical folks with their hands on these machines.  Maybe more.  Truth is – I don’t know how many there are, because I’ve never met them.  I don’t even know most of their names.  One fellow I can catch on skype, but I don’t have his phone number.

And the systems of this organization look exactly the same way – a scattering of programs and computers that are cobbled together by a mess of scripts that either don’t interface with each other, or do so in a totally unique and unpredictable way.  When something breaks, it’s an archeology exercise to figure out how it was built and what went wrong.

The organization wants to fix the problem by finding ‘a better computer person’ to add to the group.  Meanwhile, the rest of the bunch still have their fingers in their part of the mix.  If they really wanted to get things shaped up, they’d either hire a serious full time person to take on the whole picture, or at least insist that all the people involved have a regular conference call.  Without that, Conway’s law is going to keep us all poking away at a scattered bunch of misaligned things that don’t come together into anything cohesive.   

Global Development

With cheap software talent all over the globe, it’s tempting to spread a development project around the world and around the clock. You can skype over to those guys for free, it’ll be like you’re in the same room, and hey, your developers are sleeping a full third of the day; you’ve got to be able to improve on that!

The pitfalls of adding people to a team are well known – you add communication and learning overhead that will often end up delaying, rather than hurrying, the completion of a project. But let’s say you manage that issue – the teams are brought on line together at the beginning of the project, or the new guys have experience in the field, or you budget in a healthy load of learning time – you still run into the tragic poetry of Conway’s Law.

Simply stated, Conway’s law says that any team that produces a product is constrained to produce a product that is a mirror image of its communications structure. It sounds like black magic at first, but it really makes all the sense in the world. Creating a single thing – anything – takes a lot of communication and shared understanding. Put a team in two different buildings and you’ll already start to see trouble. It will be easier to make assumptions and keep coding then to walk outside in the cold. Introduce time zone differences, language barriers, and shoddy IP telephony, and you’re lucky if the two teams manage to communicate at all. Throw in one more team on another continent, and you’re doomed.

When my little company was swallowed by IBM, we were brought under a team in Massachusetts that was also trying to swallow a team in Boca, coordinate with a team in Texas (that had a person working remotely in California), manage the offshore folk in Malaysia, and be manged by the suits in Silicon Valley. Together, we were tasked with putting together a system that really had to function as one unit. A full half of the time was spent in throwing pieces back and forth over the walls between the groups groups and trying to figure out who was responsible for what. Only when we disengaged a bit, and plowed forward on a piece that could really stand alone, did we make any progress. In the end, we created as many different pieces of the puzzle as we had teams, and they worked together just as well as our teams did.

There are situations where having multiple teams can be helpful. Have the offshore team do the translation work, write plug-ins against a well documented API, or do the data-entry. As long as the assignments and the architecture are in line with the implicit team dynamics, you’ve got a good shot.

Let’s assume for a second that what I’ve said is right. The big question comes from the development methods of the major open-source projects. They have people spread out to the four winds, and they manage to come out with some really great stuff. Granted, a lot of these projects have a very small team at the lead with the rest of the folk filing in as testers and patchers, but some of the biggest and most successful are entirely distributed. How does that work? I’m thinking that there may be another dynamic at play.

If a team has a home in a physical location, bringing on a remote team will be a serious chore. But if the only home for the project is on the Internet, then no one is remote. If everyone knows that the core communications happen online, then the project has just one home – online. Remote communications are no substitute for face-to-face communications, but if they are all that you’ve got, you make the best of them. If I don’t have any team without the ‘remote’ team, then the whole distributed team can really function as one.

Is it possible to carry the mindset of the entirely distributed team into a situation where there are people physically concentrated together? I haven’t seen it happen. My intuition tells me that it’s a tall order, but I’m happy to be proven wrong.