Have you ever thought about the printer paper you use in your office, and how it affects the design of your software? Probably not. In fact, it sounds like a stupid idea. What possible effect could your printer paper have on the design of your software? I might as well be asking about the brand of shoes that you wear. But, the fact is, there are subtle things which affect the design of software in substantial ways, and often they aren’t at all obvious.
A few years ago, I visited a company that was transitioning to Scrum. I came in to help them with some code and design issues and I showed them a variety of ways to change their design to make their software testable. One of the recommendations that I gave them was to avoid using the complete set of the techniques that I showed them. I told them that it would be good get together as a team and decide which subset of techniques they’d use in particular circumstances so that that their design didn’t end up becoming a hodge-podge. “Oh”, they said, “that will be hard. Since we’re doing Scrum, we can all be moved from one team to another every sprint. It’s Collective Code Ownership!” I puzzled it a bit and replied, “No, that’s no ownership at all.”
Unfortunately, I’ve seen this scenario a number of times. The original idea in Agile was to avoid development silos – to make sure that on a team there are there is no one person who is the only one who knows how to do X. It keeps the team unblocked, and gives everyone the opportunity to do more than one thing. But, all messages dilute over time. In some organizations, “collective code ownership” means that they can staff projects like fishing expeditions. “We need a captain, two linesmen, an engineer, and five deckhands.” What they’re missing is the fact that you need to know the area to catch fish. That ocean is the one persistent thing in the fishing scenario, and code is the one persistent thing in development. If you don’t have it in mind when you make decisions, it will own you. In the no-ownership case, the failure mode is an ocean of code that is unintelligible. It looks like it was tended by dozens of short duration crews of people that didn't talk to each other, because it was.
Here’s the truth about software design and team organization. Fred Brooks attributed it to Mel Conway back in the 1970s:
Conway's Law: Any organization that designs a system will produce a design whose structure is a copy of the organization's communication structure.
Or, colloquially: Software is doomed to reflect structure of the organization that produces it.
There are a number of reasons for this, more than I can get into right now, but it is a truism. If you want to design a large system well, you have to design the organization that will work on it. Systems mirror systems. And.. when you think about it, it makes sense. How can we possibly expect cohesive software without cohesive teams?
Conway's Law isn't exactly forgotten lore.. you can see the idea in the writings of Eric Evans and Jim McCarthy, but nonetheless I am running into a number of people who haven't heard of it. Once you understand Conway's Law, you see it all around you, and you're less surprised when you see software efforts with misaligned project structure failing. Team structure is a hidden influence on software design. It's more important than the industry currently recognizes.

Comments (7)
So I've read the whole post expecting some witty point about printer paper at the end, but because you didn't deliver that I have this sad and hollow feeling in my stomach.
... oh wait, that's just yesterday's pizza.
Posted by Winsmith | November 26, 2007 1:50 PM
Apologies, Winsmith. I'm trying to think about how to tie printer paper to Conway's Law, but I've just had some pizza also, so I suspect it'll be fruitless.
Posted by Michael Feathers | November 26, 2007 3:03 PM
Of course, if your computer printer contains A4 paper you will design software in the European style (maybe sipping a latte in a left bank cafe) whereas if your printer has "letter" paper you're probably coding while sipping a latte in a Starbucks cafe). Vive la difference!
Posted by Post Script Guy | November 26, 2007 4:13 PM
So true. I really liked your point about designing the organization that will work on it. This has usually been out of my control, so I have focused on ensuring the design matches the constraints / structure of the organization.
Another observation I have made time and time again is that the principles / philosophy of the organization also impact the software, not just the organization's structure. I have been on the receiving end of vendor software that just misses the mark in terms of meeting requirements or defects, and I received the impression that the development team just didn't get it. Subsequent releases didn't change my impression.
Posted by Basil Vandegriend | November 26, 2007 6:57 PM
This brings to mind mind a job interview I once had. After some discussion of the problem domain and my experience the manager asks "So Peter, would you describe yourself as front-end, a middle tier, or a backend guy?"
"I wouldn't"
"If you had a preference to work on one?"
"I'd say all"
I could see that the manager thought I was cheating. I thought about Conway's Law and considered asking whether his team structure precluded single tier solutions. I thought better. His rejection mail correctly suggested that I wouldn't fit in current team structure. There are some religions that use an aphorism "rejection is God's protection.."
Posted by Peter Booth | November 27, 2007 6:54 AM
For UI designers, it's a common and sad joke to discover a website that has shipped a UI that is essentially a view of the team org chart. Without a designer leading the design of the software to be valuable from the customer's perspective, it will always default to the team's perspective, even if that is entirely different from the customer's perspective. About 30% of the bad user interfaces I see on the web or elsewhere are clear victims of self-centered UI design.
> How can we possibly expect cohesive
> software without cohesive teams?
One answer is clarifying who has the authority to a) lead cohesion and b) control UI decisions. It's the user interface that's the nexus of *all* development decisions, as that's where the user and code actually meet. Mediocre teams with clear and strong ownership on what the UI is often produce more cohesive software than great teams with unclear and weak ownership on the UI design process.
Posted by Scott Berkun | November 28, 2007 5:31 PM
Hi, you guys.
I happened over this discussion by accident (If you believe in 'accidents'!)
I've got a couple of points and a request for help.
As a team coach, this sounds very like the discussions we have with organisations. Usually when teams aren't performing well, or when organisational processes/procedures need to be re-designed to meet changes the company is making (for a variety of reasons).
The human side has "goodness-of-fit" or "fit-for-purpose" issues, too. Old culture hangs around - the dead hand of experience (often of what was successful inn the past) can be hard to shake.
So this issue starts to look very slippery: you have software solutions to design against a background of changing relationships in and between teams/departments and tensions between the old way and the new.
I wonder if you guys regularly ask to sit on on any team coaching sessions - could be instructive and offer the possibility of seeing design implications of the human side of the business. Is there a potential added value for you guys in offering a "diagnostic" process that includes coaching towards a new solution as well as the technical/software implications?
Forgive me if I'm teaching me grandma to suck eggs!
I have a question/request for help, too.
Talking to our customers, we know that developing and working with virtual teams is a key focus/anxiety at the moment - and as far as we can see, is likely to remain so.
Can anybody point me to good resources to help me understand what applications are out there to support virtual teams?
Thanks.
Posted by Robert Fordham | December 17, 2007 4:01 AM