OK, we’ve established that coordination and communication in software development are difficult. We’re also taking the view, supported by plenty of empirical data, that they are central, and often essential, to software projects. So what can we do to coordinate and communicate more easily?
There are many concrete answers on stuff we could do. We can have stand-up meetings, or use story cards to convey key information about product features quickly; we can document all the requirements of the system in a specification, so that everyone has a key reference to go to when they have a question; we can use fancy awareness technology to let our peers know what we’re doing throughout our working hours, and to learn about what they’re doing, etc. The list of potential solutions is huge; some solutions work well in many contexts, some have rarely been shown to work in practice. But what I’m interested in is abstracting, from these solutions, some of their main ingredients, the attributes that make them work when they work. Let’s say a daily stand-up meeting works wonders for team coordination and communication. Why does it? If we find the answer to that question, if we isolate the factors that make it work, then we can design solutions that take an even better advantage of them, or analyze whether, on principle, we can expect some other new solution to work or not, based on its use of the same attributes.
In my readings and in my empirical studies, I’ve found that there are four particularly important attributes that help people coordinate or communicate better. Depending on where you’re coming from, you may find some of these obvious or controversial:
- Synchrony. We interact close to the time when the situation arises.
- Proximity. We interact close to each other, and to the situation we’re dealing with.
- Proportionality. Our involvement in the situation is proportional with our authority in dealing with it.
- Maturity. We interact in the ways and with the patterns we’re used to, and we face mostly familiar situations.
There’s a rationale for including each of these attributes into the list, but I’d rather not get into it in this blog. It’s all in my thesis, though!
According to this list, for instance, daily stand-up meetings are generally a pretty good practice to help teams coordinate and communicate better. Interaction in stand-up meetings is synchronous and proximate: the whole team is meeting face-to-face, discussing the issues of the day. If they are performed properly, they are also proportional: those participants who have important things to share do so, and those who can help intervene if necessary. Whether they are also mature depends on the history of the team: at first, daily stand-up meetings can seem pointless or awkward, as they consist of team dynamics that the group may not be used to. Later on, if the team members persevere, their practice matures, and they can cut corners if they want to, or adapt their practice to their needs. (Daily stand-up meetings have one big drawback though: they’re impractical for large teams. I’ll discuss this in the next post.)
That list of attributes is useful because we can now turn our attention to any proposal that is supposed to help us coordinate or communicate more efficiently, and analyze whether it’s doing any good from this point of view. We can make predictions on whether processes, documentation, practices, tools, or many other things are beneficial from a coordination and communication perspective or not—and if not, we can say why.
In my next post I’ll use this analytical tool to pass judgment on some of the constructs that are (or should be) commonly used in our literature. Stay tuned!